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

📄 qmdisubwindow.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        || mainWindow->menuWidget()->isHidden())        return true;    return isChildOfQMdiSubWindow(q);#endif#endif}#ifndef QT_NO_MENUBAR/*!    \internal*/void QMdiSubWindowPrivate::showButtonsInMenuBar(QMenuBar *menuBar){    Q_Q(QMdiSubWindow);    Q_ASSERT(q->isMaximized() && !drawTitleBarWhenMaximized());    removeButtonsFromMenuBar();    if (!controlContainer)        controlContainer = new ControlContainer(q);    ignoreWindowTitleChange = true;    controlContainer->showButtonsInMenuBar(menuBar);    ignoreWindowTitleChange = false;    QWidget *topLevelWindow = q->window();    topLevelWindow->setWindowModified(q->isWindowModified());    topLevelWindow->installEventFilter(q);    int buttonHeight = 0;    if (controlContainer->controllerWidget())        buttonHeight = controlContainer->controllerWidget()->height();    else if (controlContainer->systemMenuLabel())        buttonHeight = controlContainer->systemMenuLabel()->height();    // This will rarely happen.    if (menuBar && menuBar->height() < buttonHeight            && topLevelWindow->layout()) {        // Make sure topLevelWindow->contentsRect returns correct geometry.        // topLevelWidget->updateGeoemtry will not do the trick here since it will post the event.        QEvent event(QEvent::LayoutRequest);        QApplication::sendEvent(topLevelWindow, &event);    }}/*!    \internal*/void QMdiSubWindowPrivate::removeButtonsFromMenuBar(){    if (!controlContainer)        return;    Q_Q(QMdiSubWindow);    QMenuBar *currentMenuBar = 0;#ifndef QT_NO_MAINWINDOW    if (QMainWindow *mainWindow = qobject_cast<QMainWindow *>(q->window())) {        // NB! We can't use menuBar() here because that one will actually create        // a menubar for us if not set. That's not what we want :-)        currentMenuBar = qobject_cast<QMenuBar *>(mainWindow->menuWidget());    }#endif    ignoreWindowTitleChange = true;    controlContainer->removeButtonsFromMenuBar(currentMenuBar);    ignoreWindowTitleChange = false;    QWidget *topLevelWindow = q->window();    q->removeEventFilter(topLevelWindow);    if (baseWidget && !drawTitleBarWhenMaximized())        topLevelWindow->setWindowModified(false);}#endif // QT_NO_MENUBARvoid QMdiSubWindowPrivate::updateWindowTitle(bool isRequestFromChild){    Q_Q(QMdiSubWindow);    if (isRequestFromChild && !q->windowTitle().isEmpty() && !lastChildWindowTitle.isEmpty()            && lastChildWindowTitle != q->windowTitle()) {        return;    }    QWidget *titleWidget = 0;    if (isRequestFromChild)        titleWidget = baseWidget;    else        titleWidget = q;    if (!titleWidget || titleWidget->windowTitle().isEmpty())        return;    ignoreWindowTitleChange = true;    q->setWindowTitle(titleWidget->windowTitle());    if (q->maximizedButtonsWidget())        setNewWindowTitle(q);    ignoreWindowTitleChange = false;}#ifndef QT_NO_RUBBERBANDvoid QMdiSubWindowPrivate::enterRubberBandMode(){    Q_Q(QMdiSubWindow);    if (q->isMaximized())        return;    Q_ASSERT(oldGeometry.isValid());    Q_ASSERT(q->parent());    if (!rubberBand)        rubberBand = new QRubberBand(QRubberBand::Rectangle, q->parentWidget());    QPoint rubberBandPos = q->mapToParent(QPoint(0, 0));    rubberBand->setGeometry(rubberBandPos.x(), rubberBandPos.y(),                            oldGeometry.width(), oldGeometry.height());    rubberBand->show();    isInRubberBandMode = true;    q->grabMouse();}void QMdiSubWindowPrivate::leaveRubberBandMode(){    Q_Q(QMdiSubWindow);    Q_ASSERT(rubberBand);    Q_ASSERT(isInRubberBandMode);    q->releaseMouse();    isInRubberBandMode = false;    q->setGeometry(rubberBand->geometry());    rubberBand->hide();    currentOperation = None;}#endif // QT_NO_RUBBERBAND// Taken from the old QWorkspace (::readColors())QPalette QMdiSubWindowPrivate::desktopPalette() const{    Q_Q(const QMdiSubWindow);    QPalette newPalette = q->palette();    bool colorsInitialized = false;#ifdef Q_WS_WIN // ask system properties on windows#ifndef SPI_GETGRADIENTCAPTIONS#define SPI_GETGRADIENTCAPTIONS 0x1008#endif#ifndef COLOR_GRADIENTACTIVECAPTION#define COLOR_GRADIENTACTIVECAPTION 27#endif#ifndef COLOR_GRADIENTINACTIVECAPTION#define COLOR_GRADIENTINACTIVECAPTION 28#endif    if (QApplication::desktopSettingsAware()) {        newPalette.setColor(QPalette::Active, QPalette::Highlight,                            colorref2qrgb(GetSysColor(COLOR_ACTIVECAPTION)));        newPalette.setColor(QPalette::Inactive, QPalette::Highlight,                            colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTION)));        newPalette.setColor(QPalette::Active, QPalette::HighlightedText,                            colorref2qrgb(GetSysColor(COLOR_CAPTIONTEXT)));        newPalette.setColor(QPalette::Inactive, QPalette::HighlightedText,                            colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTIONTEXT)));        if (QSysInfo::WindowsVersion != QSysInfo::WV_95                && QSysInfo::WindowsVersion != QSysInfo::WV_NT) {            colorsInitialized = true;            BOOL hasGradient;            QT_WA({                SystemParametersInfo(SPI_GETGRADIENTCAPTIONS, 0, &hasGradient, 0);            } , {                SystemParametersInfoA(SPI_GETGRADIENTCAPTIONS, 0, &hasGradient, 0);            });            if (hasGradient) {                newPalette.setColor(QPalette::Active, QPalette::Base,                                    colorref2qrgb(GetSysColor(COLOR_GRADIENTACTIVECAPTION)));                newPalette.setColor(QPalette::Inactive, QPalette::Base,                                    colorref2qrgb(GetSysColor(COLOR_GRADIENTINACTIVECAPTION)));            } else {                newPalette.setColor(QPalette::Active, QPalette::Base,                                    newPalette.color(QPalette::Active, QPalette::Highlight));                newPalette.setColor(QPalette::Inactive, QPalette::Base,                                    newPalette.color(QPalette::Inactive, QPalette::Highlight));            }        }    }#endif // Q_WS_WIN    if (!colorsInitialized) {        newPalette.setColor(QPalette::Active, QPalette::Highlight,                            newPalette.color(QPalette::Active, QPalette::Highlight));        newPalette.setColor(QPalette::Active, QPalette::Base,                            newPalette.color(QPalette::Active, QPalette::Highlight));        newPalette.setColor(QPalette::Inactive, QPalette::Highlight,                            newPalette.color(QPalette::Inactive, QPalette::Dark));        newPalette.setColor(QPalette::Inactive, QPalette::Base,                            newPalette.color(QPalette::Inactive, QPalette::Dark));        newPalette.setColor(QPalette::Inactive, QPalette::HighlightedText,                            newPalette.color(QPalette::Inactive, QPalette::Window));    }    return newPalette;}void QMdiSubWindowPrivate::updateActions(){    Qt::WindowFlags windowFlags = q_func()->windowFlags();    // Hide all    for (int i = 0; i < NumWindowStateActions; ++i)        setVisible(WindowStateAction(i), false);    if (windowFlags & Qt::FramelessWindowHint)        return;    setVisible(StayOnTopAction, true);    setVisible(MoveAction, moveEnabled);    setVisible(ResizeAction, resizeEnabled);    // CloseAction    if (windowFlags & Qt::WindowSystemMenuHint)        setVisible(CloseAction, true);    // RestoreAction    if (windowFlags & (Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint))        setVisible(RestoreAction, true);    // MinimizeAction    if (windowFlags & Qt::WindowMinimizeButtonHint)        setVisible(MinimizeAction, true);    // MaximizeAction    if (windowFlags & Qt::WindowMaximizeButtonHint)        setVisible(MaximizeAction, true);}void QMdiSubWindowPrivate::setFocusWidget(){    Q_Q(QMdiSubWindow);    if (!baseWidget) {        q->setFocus();        return;    }    // This will give focus to the next child if possible, otherwise    // do nothing, hence it's not possible to tab between windows with    // just hitting tab (unless Qt::TabFocus is removed from the focus policy).    if (focusInReason == Qt::TabFocusReason) {        q->focusNextChild();        return;    }    // Same as above, but gives focus to the previous child.    if (focusInReason == Qt::BacktabFocusReason) {        q->focusPreviousChild();        return;    }    if (QWidget *focusWidget = baseWidget->focusWidget()) {        if (!focusWidget->hasFocus() && q->isAncestorOf(focusWidget)                && focusWidget->isVisible() && !q->isMinimized()                && focusWidget->focusPolicy() != Qt::NoFocus) {            focusWidget->setFocus();        } else {            q->setFocus();        }        return;    }    QWidget *focusWidget = q->nextInFocusChain();    while (focusWidget && focusWidget != q && focusWidget->focusPolicy() == Qt::NoFocus)        focusWidget = focusWidget->nextInFocusChain();    if (focusWidget && q->isAncestorOf(focusWidget))        focusWidget->setFocus();    else if (baseWidget->focusPolicy() != Qt::NoFocus)        baseWidget->setFocus();    else if (!q->hasFocus())        q->setFocus();}void QMdiSubWindowPrivate::restoreFocus(){    if (!restoreFocusWidget)        return;    if (!restoreFocusWidget->hasFocus() && q_func()->isAncestorOf(restoreFocusWidget)            && restoreFocusWidget->isVisible()            && restoreFocusWidget->focusPolicy() != Qt::NoFocus) {        restoreFocusWidget->setFocus();    }    restoreFocusWidget = 0;}/*!    \internal    ### Please add QEvent::WindowFlagsChange event*/void QMdiSubWindowPrivate::setWindowFlags(Qt::WindowFlags windowFlags){    Q_Q(QMdiSubWindow);    if (!q->parent()) {        q->setWindowFlags(windowFlags);        return;    }    Qt::WindowFlags windowType = windowFlags & Qt::WindowType_Mask;    if (windowType == Qt::Dialog || windowFlags & Qt::MSWindowsFixedSizeDialogHint)        windowFlags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint;    // Set standard flags if none of the customize flags are set    if (!(windowFlags & CustomizeWindowFlags))        windowFlags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint;    else if (windowFlags & Qt::FramelessWindowHint && windowFlags & Qt::WindowStaysOnTopHint)        windowFlags = Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint;    else if (windowFlags & Qt::FramelessWindowHint)        windowFlags = Qt::FramelessWindowHint;    windowFlags &= ~windowType;    windowFlags |= Qt::SubWindow;#ifndef QT_NO_ACTION    if (QAction *stayOnTopAction = actions[QMdiSubWindowPrivate::StayOnTopAction]) {        if (windowFlags & Qt::WindowStaysOnTopHint)            stayOnTopAction->setChecked(true);        else            stayOnTopAction->setChecked(false);    }#endif#ifndef QT_NO_SIZEGRIP    if ((windowFlags & Qt::FramelessWindowHint) && sizeGrip)        delete sizeGrip;#endif    q->setWindowFlags(windowFlags);    updateGeometryConstraints();    updateActions();    QSize currentSize = q->size();    if (q->isVisible() && (currentSize.width() < internalMinimumSize.width()            || currentSize.height() < internalMinimumSize.height())) {        q->resize(currentSize.expandedTo(internalMinimumSize));    }}void QMdiSubWindowPrivate::setVisible(WindowStateAction action, bool visible){#ifndef QT_NO_ACTION    if (actions[action])        actions[action]->setVisible(visible);#endif    Q_Q(QMdiSubWindow);    if (!controlContainer)        controlContainer = new ControlContainer(q);    if (ControllerWidget *ctrlWidget = qobject_cast<ControllerWidget *>                                       (controlContainer->controllerWidget())) {        ctrlWidget->setControlVisible(action, visible);    }}#ifndef QT_NO_ACTIONvoid QMdiSubWindowPrivate::setEnabled(WindowStateAction action, bool enable){    if (actions[action])        actions[action]->setEnabled(enable);}#ifndef QT_NO_MENUvoid QMdiSubWindowPrivate::addToSystemMenu(WindowStateAction action, const QString &text,                                           const char *slot){    if (!systemMenu)        return;    actions[action] = systemMenu->addAction(text, q_func(), slot);}#endif#endif // QT_NO_ACTION/*!    \internal*/QSize QMdiSubWindowPrivate::iconSize() const{    Q_Q(const QMdiSubWindow);    if (!q->parent() || q->windowFlags() & Qt::FramelessWindowHint)        return QSize(-1, -1);    return QSize(q->style()->pixelMetric(QStyle::PM_MdiSubWindowMinimizedWidth), titleBarHeight());}#ifndef QT_NO_SIZEGRIP/*!    \internal*/void QMdiSubWindowPrivate::setSizeGrip(QSizeGrip *newSizeGrip){    Q_Q(QMdiSubWindow);    if (!newSizeGrip || sizeGrip || q->windowFlags() & Qt::FramelessWindowHint)        return;    if (q->layout() && q->layout()->indexOf(newSizeGrip) != -1)        return;    newSizeGrip->setFixedSize(newSizeGrip->sizeHint());    bool putSizeGripInLayout = q->layout() ? true : false;#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC)    if (qobject_cast<QMacStyle *>(q->style()))        putSizeGripInLayout = false;#endif    if (putSizeGripInLayout) {        q->layout()->addWidget(newSizeGrip);        q->layout()->setAlignment(newSizeGrip, Qt::AlignBottom | Qt::AlignRight);    } else {        newSizeGrip->setParent(q);        newSizeGrip->move(q->isLeftToRight() ? q->width() - newSizeGrip->width() : 0,                          q->height() - newSizeGrip->height());        sizeGrip = newSizeGrip;    }    newSizeGrip->raise();    updateGeometryConstraints();    newSizeGrip->installEventFilter(q);}/*!

⌨️ 快捷键说明

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