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

📄 qmdisubwindow.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        if (QMainWindow *mainWindow = qobject_cast<QMainWindow *>(q->window())) {#ifdef QT_NO_MENUBAR            Q_UNUSED(mainWindow);#else            showButtonsInMenuBar(mainWindow->menuBar());#endif        } else#endif // QT_NO_MAINWINDOW        if (!controlContainer) {            controlContainer = new ControlContainer(q);        }    }    QWidget *parent = q->parentWidget();    QRect availableRect = parent->contentsRect();    // Adjust geometry if the sub-window is inside a scroll area.    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(parent->parentWidget());    if (scrollArea && scrollArea->viewport() == parent) {        QScrollBar *hbar = scrollArea->horizontalScrollBar();        QScrollBar *vbar = scrollArea->verticalScrollBar();        const int xOffset = hbar ? hbar->value() : 0;        const int yOffset = vbar ? vbar->value() : 0;        availableRect.adjust(-xOffset, -yOffset, -xOffset, -yOffset);        oldGeometry.adjust(xOffset, yOffset, xOffset, yOffset);    }    setNewGeometry(&availableRect);    // QWidget::setGeometry will reset Qt::WindowMaximized so we have to update it here.    ensureWindowState(Qt::WindowMaximized);    if (wasVisible)        q->setVisible(true);    resizeEnabled = false;    moveEnabled = false;#ifndef QT_NO_ACTION    setEnabled(MoveAction, moveEnabled);    setEnabled(MaximizeAction, false);    setEnabled(MinimizeAction, true);    setEnabled(RestoreAction, true);    setEnabled(ResizeAction, resizeEnabled);#endif // QT_NO_ACTION    Q_ASSERT(q->windowState() & Qt::WindowMaximized);    Q_ASSERT(!(q->windowState() & Qt::WindowMinimized));    restoreFocus();    updateMask();}/*!    \internal*/void QMdiSubWindowPrivate::setActive(bool activate){    Q_Q(QMdiSubWindow);    if (!q->parent() || !activationEnabled)        return;    if (activate && !isActive && q->isEnabled()) {        isActive = true;        isExplicitlyDeactivated = false;        Qt::WindowStates oldWindowState = q->windowState();        ensureWindowState(Qt::WindowActive);        emit q->aboutToActivate();        if (q->isMaximized() && !drawTitleBarWhenMaximized()) {#ifndef QT_NO_MAINWINDOW            if (QMainWindow *mainWindow = qobject_cast<QMainWindow *>(q->window())) {#ifdef QT_NO_MENUBAR                Q_UNUSED(mainWindow);#else                showButtonsInMenuBar(mainWindow->menuBar());#endif            }#endif // QT_NO_MAINWINDOW        }        Q_ASSERT(isActive);        emit q->windowStateChanged(oldWindowState, q->windowState());    } else if (!activate && isActive) {        isActive = false;        Qt::WindowStates oldWindowState = q->windowState();        q->overrideWindowState(q->windowState() & ~Qt::WindowActive);        QWidget *focusWidget = QApplication::focusWidget();        if (focusWidget && (focusWidget == q || q->isAncestorOf(focusWidget)))            focusWidget->clearFocus();        if (baseWidget)            baseWidget->overrideWindowState(baseWidget->windowState() & ~Qt::WindowActive);        Q_ASSERT(!isActive);        emit q->windowStateChanged(oldWindowState, q->windowState());    }    if (activate && isActive && q->isEnabled() && !q->hasFocus()            && !q->isAncestorOf(QApplication::focusWidget())) {        setFocusWidget();        ensureWindowState(Qt::WindowActive);    }    int frameWidth = q->style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth);    int titleBarHeight = this->titleBarHeight();    QRegion windowDecoration = QRegion(0, 0, q->width(), q->height());    windowDecoration -= QRegion(frameWidth, titleBarHeight, q->width() - 2 * frameWidth,                                q->height() - titleBarHeight - frameWidth);    // Make sure we don't use cached style options if we get    // resize events right before activation/deactivation.    if (resizeTimerId != -1) {        q->killTimer(resizeTimerId);        resizeTimerId = -1;        updateDirtyRegions();    }    q->update(windowDecoration);}/*!    \internal*/void QMdiSubWindowPrivate::processClickedSubControl(){    Q_Q(QMdiSubWindow);    switch (activeSubControl) {    case QStyle::SC_TitleBarContextHelpButton:#ifndef QT_NO_WHATSTHIS        QWhatsThis::enterWhatsThisMode();#endif        break;    case QStyle::SC_TitleBarShadeButton:        q->showShaded();        hoveredSubControl = QStyle::SC_TitleBarUnshadeButton;        break;    case QStyle::SC_TitleBarUnshadeButton:        if (q->isShaded())            hoveredSubControl = QStyle::SC_TitleBarShadeButton;        q->showNormal();        break;    case QStyle::SC_TitleBarMinButton:#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)        if (qobject_cast<QMacStyle *>(q->style())) {            if (q->isMinimized())                q->showNormal();            else                q->showMinimized();            break;        }#endif        q->showMinimized();        break;    case QStyle::SC_TitleBarNormalButton:        if (q->isShaded())            hoveredSubControl = QStyle::SC_TitleBarMinButton;        q->showNormal();        break;    case QStyle::SC_TitleBarMaxButton:#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)        if (qobject_cast<QMacStyle *>(q->style())) {            if (q->isMaximized())                q->showNormal();            else                q->showMaximized();            break;        }#endif        q->showMaximized();        break;    case QStyle::SC_TitleBarCloseButton:        q->close();        break;    default:        break;    }}/*!    \internal*/QRegion QMdiSubWindowPrivate::getRegion(Operation operation) const{    Q_Q(const QMdiSubWindow);    int width = q->width();    int height = q->height();    int titleBarHeight = this->titleBarHeight();    int frameWidth = q->style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth);    int cornerConst = titleBarHeight - frameWidth;    int titleBarConst = 2 * titleBarHeight;    if (operation == Move) {        QStyleOptionTitleBar titleBarOptions = this->titleBarOptions();        QRegion move(frameWidth, frameWidth, width - 2 * frameWidth, cornerConst);        // Depending on which window flags are set, activated sub controllers will        // be subtracted from the 'move' region.        for (int i = 0; i < NumSubControls; ++i) {            if (SubControls[i] == QStyle::SC_TitleBarLabel)                continue;            move -= QRegion(q->style()->subControlRect(QStyle::CC_TitleBar, &titleBarOptions,                            SubControls[i]));        }        return move;    }    QRegion region;#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)    if (qobject_cast<QMacStyle *>(q->style()))        return region;#endif    switch (operation) {    case TopResize:        region = QRegion(titleBarHeight, 0, width - titleBarConst, frameWidth);        break;    case BottomResize:        region = QRegion(titleBarHeight, height - frameWidth, width - titleBarConst, frameWidth);        break;    case LeftResize:        region = QRegion(0, titleBarHeight, frameWidth, height - titleBarConst);        break;    case RightResize:        region = QRegion(width - frameWidth, titleBarHeight, frameWidth, height - titleBarConst);        break;    case TopLeftResize:        region = QRegion(0, 0, titleBarHeight, titleBarHeight)                 - QRegion(frameWidth, frameWidth, cornerConst, cornerConst);        break;    case TopRightResize:        region =  QRegion(width - titleBarHeight, 0, titleBarHeight, titleBarHeight)                  - QRegion(width - titleBarHeight, frameWidth, cornerConst, cornerConst);        break;    case BottomLeftResize:        region = QRegion(0, height - titleBarHeight, titleBarHeight, titleBarHeight)                 - QRegion(frameWidth, height - titleBarHeight, cornerConst, cornerConst);        break;    case BottomRightResize:        region = QRegion(width - titleBarHeight, height - titleBarHeight, titleBarHeight, titleBarHeight)                 - QRegion(width - titleBarHeight, height - titleBarHeight, cornerConst, cornerConst);        break;    default:        break;    }    return region;}/*!    \internal*/QMdiSubWindowPrivate::Operation QMdiSubWindowPrivate::getOperation(const QPoint &pos) const{    OperationInfoMap::const_iterator it;    for (it = operationMap.constBegin(); it != operationMap.constEnd(); ++it)        if (it.value().region.contains(pos))            return it.key();    return None;}extern QString qt_setWindowTitle_helperHelper(const QString &, QWidget *);/*!    \internal*/QStyleOptionTitleBar QMdiSubWindowPrivate::titleBarOptions() const{    Q_Q(const QMdiSubWindow);    QStyleOptionTitleBar titleBarOptions;    titleBarOptions.initFrom(q);    if (activeSubControl != QStyle::SC_None) {        if (hoveredSubControl == activeSubControl) {            titleBarOptions.state |= QStyle::State_Sunken;            titleBarOptions.activeSubControls = activeSubControl;        }    } else if (autoRaise() && hoveredSubControl != QStyle::SC_None               && hoveredSubControl != QStyle::SC_TitleBarLabel) {        titleBarOptions.state |= QStyle::State_MouseOver;        titleBarOptions.activeSubControls = hoveredSubControl;    } else {        titleBarOptions.state &= ~QStyle::State_MouseOver;        titleBarOptions.activeSubControls = QStyle::SC_None;    }    titleBarOptions.subControls = QStyle::SC_All;    titleBarOptions.titleBarFlags = q->windowFlags();    titleBarOptions.titleBarState = q->windowState();    titleBarOptions.palette = titleBarPalette;    titleBarOptions.icon = menuIcon;    if (isActive) {        titleBarOptions.state |= QStyle::State_Active;        titleBarOptions.titleBarState |= QStyle::State_Active;        titleBarOptions.palette.setCurrentColorGroup(QPalette::Active);    } else {        titleBarOptions.state &= ~QStyle::State_Active;        titleBarOptions.palette.setCurrentColorGroup(QPalette::Inactive);    }    int border = hasBorder(titleBarOptions) ? 4 : 0;    int paintHeight = titleBarHeight(titleBarOptions);    paintHeight -= q->isMinimized() ? 2 * border : border;    titleBarOptions.rect = QRect(border, border, q->width() - 2 * border, paintHeight);    if (!windowTitle.isEmpty()) {        // Set the text here before asking for the width of the title bar label        // in case people uses the actual text to calculate the width.        titleBarOptions.text = windowTitle;        titleBarOptions.fontMetrics = QFontMetrics(font);        int width = q->style()->subControlRect(QStyle::CC_TitleBar, &titleBarOptions,                                               QStyle::SC_TitleBarLabel, q).width();        // Set elided text if we don't have enough space for the entire title.        titleBarOptions.text = titleBarOptions.fontMetrics.elidedText(windowTitle, Qt::ElideRight, width);    }    return titleBarOptions;}/*!    \internal*/void QMdiSubWindowPrivate::ensureWindowState(Qt::WindowState state){    Q_Q(QMdiSubWindow);    Qt::WindowStates windowStates = q->windowState() | state;    switch (state) {    case Qt::WindowMinimized:        windowStates &= ~Qt::WindowMaximized;        windowStates &= ~Qt::WindowNoState;        break;    case Qt::WindowMaximized:        windowStates &= ~Qt::WindowMinimized;        windowStates &= ~Qt::WindowNoState;        break;    case Qt::WindowNoState:        windowStates &= ~Qt::WindowMinimized;        windowStates &= ~Qt::WindowMaximized;        break;    default:        break;    }    if (baseWidget) {        if (!(baseWidget->windowState() & Qt::WindowActive) && windowStates & Qt::WindowActive)            baseWidget->overrideWindowState(windowStates & ~Qt::WindowActive);        else            baseWidget->overrideWindowState(windowStates);    }    q->overrideWindowState(windowStates);}/*!    \internal*/int QMdiSubWindowPrivate::titleBarHeight(const QStyleOptionTitleBar &options) const{    Q_Q(const QMdiSubWindow);    if (!q->parent() || q->windowFlags() & Qt::FramelessWindowHint        || (q->isMaximized() && !drawTitleBarWhenMaximized())) {        return 0;    }    int height = q->style()->pixelMetric(QStyle::PM_TitleBarHeight, &options);#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)    // ### Fix mac style, the +4 pixels hack is not necessary anymore    if (qobject_cast<QMacStyle *>(q->style()))        height -= 4;#endif    if (hasBorder(options))        height += q->isMinimized() ? 8 : 4;    return height;}/*!    \internal*/void QMdiSubWindowPrivate::sizeParameters(int *margin, int *minWidth) const{    Q_Q(const QMdiSubWindow);    Qt::WindowFlags flags = q->windowFlags();    if (!q->parent() || flags & Qt::FramelessWindowHint) {        *margin = 0;        *minWidth = 0;        return;    }    if (q->isMaximized() && !drawTitleBarWhenMaximized())        *margin = 0;    else        *margin = q->style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth);    QStyleOptionTitleBar opt = this->titleBarOptions();    int tempWidth = 0;    for (int i = 0; i < NumSubControls; ++i) {        if (SubControls[i] == QStyle::SC_TitleBarLabel) {            tempWidth += 30;            continue;        }        QRect rect = q->style()->subControlRect(QStyle::CC_TitleBar, &opt, SubControls[i], q);        if (!rect.isValid())            continue;        tempWidth += rect.width();    }    *minWidth = tempWidth;}/*!    \internal*/bool QMdiSubWindowPrivate::drawTitleBarWhenMaximized() const{    Q_Q(const QMdiSubWindow);    if (q->window()->testAttribute(Qt::WA_CanHostQMdiSubWindowTitleBar))        return false;#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)    return true;#else    if (q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q))        return true;#if defined(QT_NO_MENUBAR) || defined(QT_NO_MAINWINDOW)    return true;#else    QMainWindow *mainWindow = qobject_cast<QMainWindow *>(q->window());    if (!mainWindow || !qobject_cast<QMenuBar *>(mainWindow->menuWidget())

⌨️ 快捷键说明

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