⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmainwindowlayout.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        SetWindowToolbar(window, macToolbar);        if (layoutState.mainWindow->isVisible())            ShowHideWindowToolbar(window, true, false);        CFRelease(macToolbar);    }    int beforeIndex = qtoolbarsInHIToolbarList.indexOf(before);    if (beforeIndex == -1)        beforeIndex = qtoolbarsInHIToolbarList.size();    int toolbarIndex = qtoolbarsInHIToolbarList.indexOf(toolbar);    if (toolbarIndex != -1) {        qtoolbarsInHIToolbarList.removeAt(toolbarIndex);        HIToolbarRemoveItemAtIndex(macToolbar, toolbarIndex);    }    // Make the toolbar a child of the mainwindow to avoid creating a window.    toolbar->setParent(layoutState.mainWindow);    toolbar->createWinId();  // Now create the HIViewRef.    qtoolbarsInHIToolbarList.insert(beforeIndex, toolbar);    QCFType<HIToolbarItemRef> outItem;    const QObject *stupidArray[] = { toolbar, this };    QCFType<CFArrayRef> array = CFArrayCreate(0, reinterpret_cast<const void **>(&stupidArray),                                              2, 0);    HIToolbarCreateItemWithIdentifier(macToolbar, CFSTR("com.trolltech.qt.hitoolbar-qtoolbar"),                                      array, &outItem);    HIToolbarInsertItemAtIndex(macToolbar, outItem, beforeIndex);}#endif // Q_WS_MAC/* Removes the toolbar from the mainwindow so that it can be added again. Does not   explicitly hide the toolbar. */void QMainWindowLayout::removeToolBar(QToolBar *toolbar){    if (toolbar) {        QObject::disconnect(parentWidget(), SIGNAL(iconSizeChanged(QSize)),                   toolbar, SLOT(_q_updateIconSize(QSize)));        QObject::disconnect(parentWidget(), SIGNAL(toolButtonStyleChanged(Qt::ToolButtonStyle)),                   toolbar, SLOT(_q_updateToolButtonStyle(Qt::ToolButtonStyle)));#ifdef Q_WS_MAC        if (usesHIToolBar(toolbar)) {            QHash<HIToolbarItemRef, QToolBar *>::iterator it = hitoolbarHash.begin();            while (it != hitoolbarHash.end()) {                if (it.value() == toolbar) {                    // Rescue our HIView and set it on the mainWindow again.                    bool saveVisible = toolbar->isVisible();                    toolbar->setParent(0);                    toolbar->setParent(parentWidget());                    toolbar->setVisible(saveVisible);                    ToolBarSaveState saveState = toolbarSaveState.value(toolbar);                    static_cast<QToolBarLayout *>(toolbar->layout())->setUsePopupMenu(false);                    toolbar->setMovable(saveState.movable);                    toolbar->setMaximumSize(saveState.maximumSize);                    toolbarSaveState.remove(toolbar);                    HIToolbarItemRef item = it.key();                    HIToolbarRemoveItemAtIndex(HIToolbarItemGetToolbar(item),                                               toolbarItemsCopy.indexOf(item));                    break;                }                ++it;            }        } else#endif // Q_WS_MAC        {            removeWidget(toolbar);        }    }}/*!    Adds \a toolbar to \a area, continuing the current line.*/void QMainWindowLayout::addToolBar(Qt::ToolBarArea area,                                   QToolBar *toolbar,                                   bool){    validateToolBarArea(area);#ifdef Q_WS_MAC    if ((area == Qt::TopToolBarArea)            && layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) {        insertIntoMacHIToolbar(0, toolbar);    } else#endif    {        addChildWidget(toolbar);        layoutState.toolBarAreaLayout.addToolBar(toDockPos(area), toolbar);        invalidate();    }}/*!    Adds \a toolbar before \a before*/void QMainWindowLayout::insertToolBar(QToolBar *before, QToolBar *toolbar){#ifdef Q_WS_MAC    if (usesHIToolBar(before)) {        insertIntoMacHIToolbar(before, toolbar);    } else#endif // Q_WS_MAC    {        addChildWidget(toolbar);        layoutState.toolBarAreaLayout.insertToolBar(before, toolbar);        invalidate();    }}Qt::ToolBarArea QMainWindowLayout::toolBarArea(QToolBar *toolbar) const{    QInternal::DockPosition pos = layoutState.toolBarAreaLayout.findToolBar(toolbar);    switch (pos) {        case QInternal::LeftDock:   return Qt::LeftToolBarArea;        case QInternal::RightDock:  return Qt::RightToolBarArea;        case QInternal::TopDock:    return Qt::TopToolBarArea;        case QInternal::BottomDock: return Qt::BottomToolBarArea;        default: break;    }#ifdef Q_WS_MAC    if (pos == QInternal::DockCount) {        if (qtoolbarsInHIToolbarList.contains(toolbar))            return Qt::TopToolBarArea;    }#endif    return Qt::NoToolBarArea;}bool QMainWindowLayout::toolBarBreak(QToolBar *toolBar) const{    return layoutState.toolBarAreaLayout.toolBarBreak(toolBar);}void QMainWindowLayout::getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar *toolBar) const{    option->toolBarArea = toolBarArea(toolBar);    layoutState.toolBarAreaLayout.getStyleOptionInfo(option, toolBar);}void QMainWindowLayout::toggleToolBarsVisible(){    layoutState.toolBarAreaLayout.visible = !layoutState.toolBarAreaLayout.visible;    QRect oldRect = parentWidget()->geometry();    QRect newRect = layoutState.toolBarAreaLayout.rectHint(oldRect);    newRect.moveTopRight(oldRect.topRight());//    widgetAnimator->animate(parentWidget(), r, true);    parentWidget()->setGeometry(newRect);}#endif // QT_NO_TOOLBAR/******************************************************************************** QMainWindowLayoutState - dock areas*/#ifndef QT_NO_DOCKWIDGETstatic inline void validateDockWidgetArea(Qt::DockWidgetArea &area){    switch (area) {    case Qt::LeftDockWidgetArea:    case Qt::RightDockWidgetArea:    case Qt::TopDockWidgetArea:    case Qt::BottomDockWidgetArea:        break;    default:        area = Qt::LeftDockWidgetArea;    }}static QInternal::DockPosition toDockPos(Qt::DockWidgetArea area){    switch (area) {        case Qt::LeftDockWidgetArea: return QInternal::LeftDock;        case Qt::RightDockWidgetArea: return QInternal::RightDock;        case Qt::TopDockWidgetArea: return QInternal::TopDock;        case Qt::BottomDockWidgetArea: return QInternal::BottomDock;        default:            break;    }    return QInternal::DockCount;}static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos){    switch (pos) {        case QInternal::LeftDock : return Qt::LeftDockWidgetArea;        case QInternal::RightDock : return Qt::RightDockWidgetArea;        case QInternal::TopDock : return Qt::TopDockWidgetArea;        case QInternal::BottomDock : return Qt::BottomDockWidgetArea;        default:            break;    }    return Qt::NoDockWidgetArea;}inline static Qt::DockWidgetArea toDockWidgetArea(int pos){    return toDockWidgetArea(static_cast<QInternal::DockPosition>(pos));}void QMainWindowLayout::setCorner(Qt::Corner corner, Qt::DockWidgetArea area){    if (layoutState.dockAreaLayout.corners[corner] == area)        return;    layoutState.dockAreaLayout.corners[corner] = area;    invalidate();}Qt::DockWidgetArea QMainWindowLayout::corner(Qt::Corner corner) const{    return layoutState.dockAreaLayout.corners[corner];}void QMainWindowLayout::addDockWidget(Qt::DockWidgetArea area,                                             QDockWidget *dockwidget,                                             Qt::Orientation orientation){    addChildWidget(dockwidget);    // If we are currently moving a separator, then we need to abort the move, since each    // time we move the mouse layoutState is replaced by savedState modified by the move.    if (!movingSeparator.isEmpty())        endSeparatorMove(movingSeparatorPos);    layoutState.dockAreaLayout.addDockWidget(toDockPos(area), dockwidget, orientation);    emit dockwidget->dockLocationChanged(area);    invalidate();}void QMainWindowLayout::tabifyDockWidget(QDockWidget *first, QDockWidget *second){    addChildWidget(second);    layoutState.dockAreaLayout.tabifyDockWidget(first, second);    emit second->dockLocationChanged(dockWidgetArea(first));    invalidate();}void QMainWindowLayout::setVerticalTabsEnabled(bool enabled){#ifdef QT_NO_TABBAR    Q_UNUSED(enabled);#else    QDockAreaLayout &layout = layoutState.dockAreaLayout;    const QTabBar::Shape verticalShapes[] = {        QTabBar::RoundedWest,        QTabBar::RoundedEast,        QTabBar::RoundedNorth,        QTabBar::RoundedSouth    };    for (int i = 0; i < QInternal::DockCount; ++i) {        layout.docks[i].setTabBarShape(            enabled ? verticalShapes[i] : QTabBar::RoundedSouth        );    }#endif // QT_NO_TABBAR}void QMainWindowLayout::splitDockWidget(QDockWidget *after,                                               QDockWidget *dockwidget,                                               Qt::Orientation orientation){    addChildWidget(dockwidget);    layoutState.dockAreaLayout.splitDockWidget(after, dockwidget, orientation);    emit dockwidget->dockLocationChanged(dockWidgetArea(after));    invalidate();}Qt::DockWidgetArea QMainWindowLayout::dockWidgetArea(QDockWidget *widget) const{    QList<int> pathToWidget = layoutState.dockAreaLayout.indexOf(widget);    if (pathToWidget.isEmpty())        return Qt::NoDockWidgetArea;    return toDockWidgetArea(pathToWidget.first());}void QMainWindowLayout::keepSize(QDockWidget *w){    layoutState.dockAreaLayout.keepSize(w);}#ifndef QT_NO_TABBARclass QMainWindowTabBar : public QTabBar{public:    QMainWindowTabBar(QWidget *parent);protected:    bool event(QEvent *e);};QMainWindowTabBar::QMainWindowTabBar(QWidget *parent)    : QTabBar(parent){    static_cast<QTabBarPrivate*>(d_ptr)->squeezeTabs = true;}bool QMainWindowTabBar::event(QEvent *e){    // show the tooltip if tab is too small to fit label    if (e->type() != QEvent::ToolTip)        return QTabBar::event(e);    QSize size = this->size();    QSize hint = sizeHint();    if (shape() == QTabBar::RoundedWest || shape() == QTabBar::RoundedEast) {        size.transpose();        hint.transpose();    }    if (size.width() < hint.width())        return QTabBar::event(e);    e->accept();    return true;}QTabBar *QMainWindowLayout::getTabBar(){    QTabBar *result = 0;    if (!unusedTabBars.isEmpty()) {        result = unusedTabBars.takeLast();    } else {        result = new QMainWindowTabBar(parentWidget());        result->setShape(QTabBar::RoundedSouth);        result->setDrawBase(true);        result->setElideMode(Qt::ElideRight);        connect(result, SIGNAL(currentChanged(int)), this, SLOT(tabChanged()));    }    usedTabBars.insert(result);    return result;}void QMainWindowLayout::tabChanged(){    QTabBar *tb = qobject_cast<QTabBar*>(sender());    if (tb == 0)        return;    QDockAreaLayoutInfo *info = layoutState.dockAreaLayout.info(tb);    if (info == 0)        return;    info->apply(false);    if (QWidget *w = centralWidget())        w->raise();}#endif // QT_NO_TABBARbool QMainWindowLayout::startSeparatorMove(const QPoint &pos){    movingSeparator = layoutState.dockAreaLayout.findSeparator(pos);    if (movingSeparator.isEmpty())        return false;    savedState = layoutState;    movingSeparatorPos = movingSeparatorOrigin = pos;    return true;}bool QMainWindowLayout::separatorMove(const QPoint &pos){    if (movingSeparator.isEmpty())        return false;    movingSeparatorPos = pos;    separatorMoveTimer->start();    return true;}void QMainWindowLayout::doSeparatorMove(){    if (movingSeparator.isEmpty())        return;    if (movingSeparatorOrigin == movingSeparatorPos)        return;    layoutState = savedState;    layoutState.dockAreaLayout.separatorMove(movingSeparator, movingSeparatorOrigin,                                                movingSeparatorPos,                                                &separatorMoveCache);    movingSeparatorPos = movingSeparatorOrigin;}bool QMainWindowLayout::endSeparatorMove(const QPoint&){    bool result = !movingSeparator.isEmpty();    movingSeparator.clear();    savedState.clear();    separatorMoveCache.clear();    return result;}void QMainWindowLayout::raise(QDockWidget *widget){    QDockAreaLayoutInfo *info = layoutState.dockAreaLayout.info(widget);    if (info == 0)        return;#ifndef QT_NO_TABBAR    if (!info->tabbed)        return;    info->setCurrentTab(widget);#endif}#endif // QT_NO_DOCKWIDGET/******************************************************************************** QMainWindowLayoutState - layout interface*/int QMainWindowLayout::count() const{    qWarning("QMainWindowLayout::count: ?");    return 0; //#################################################}QLayoutItem *QMainWindowLayout::itemAt(int index) const{    int x = 0;    if (QLayoutItem *ret = layoutState.itemAt(index, &x))        return ret;    if (statusbar && x++ == index)        return statusbar;    return 0;}QLayoutItem *QMainWindowLayout::takeAt(int index){    int x = 0;    if (QLayoutItem *ret = layoutState.takeAt(index, &x)) {        // the widget might in fact have been destroyed by now        if (QWidget *w = ret->widget()) {            widgetAnimator->abort(w);            if (w == pluggingWidget)                pluggingWidget = 0;        }        return ret;    }    if (statusbar && x++ == index) {        QLayoutItem *ret = statusbar;        statusbar = 0;        return ret;    }    return 0;}void QMainWindowLayout::setGeometry(const QRect &_r){    if (savedState.isValid())        return;    QRect r = _r;    QLayout::setGeometry(r);    if (statusbar) {        QRect sbr(QPoint(0, 0),                  QSize(r.width(), statusbar->heightForWidth(r.width()))                  .expandedTo(statusbar->minimumSize()));        sbr.moveBottom(r.bottom());        QRect vr = QStyle::visualRect(QApplication::layoutDirection(), _r, sbr);        statusbar->setGeometry(vr);        r.setBottom(sbr.top() - 1);    }    layoutState.rect = r;    layoutState.fitLayout();    applyState(layoutState, false);}void QMainWindowLayout::addItem(QLayoutItem *){ qWarning("QMainWindowLayout::addItem: Please use the public QMainWindow API instead"); }QSize QMainWindowLayout::sizeHint() const{    if (!szHint.isValid()) {        szHint = layoutState.sizeHint();        const QSize sbHint = statusbar ? statusbar->sizeHint() : QSize(0, 0);        szHint = QSize(qMax(sbHint.width(), szHint.width()),                        sbHint.height() + szHint.height());    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -