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

📄 qmainwindowlayout.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    case Qt::RightDockWidgetArea:        right.setBottom(r.bottom());        bottom.setRight(right.left() - 1);        break;    default:        Q_ASSERT(false);    }    for (int i = 0; i < 4; ++i) {        if (!layout_info[i].item) continue;        if (rect[i].isValid())            layout_info[i].size = rect[i].size();        QRect x, s;        switch (i) {        case LEFT:            x.setCoords(rect[i].left(),                        rect[i].top(),                        rect[i].right() - ext,                        rect[i].bottom());            s.setCoords(x.right() + 1,                        rect[i].top(),                        rect[i].right(),                        rect[i].bottom());            break;        case RIGHT:            x.setCoords(rect[i].left() + ext,                        rect[i].top(),                        rect[i].right(),                        rect[i].bottom());            s.setCoords(rect[i].left(),                        rect[i].top(),                        x.left() - 1,                        rect[i].bottom());            break;        case TOP:            x.setCoords(rect[i].left(),                        rect[i].top(),                        rect[i].right(),                        rect[i].bottom() - ext);            s.setCoords(rect[i].left(),                        x.bottom() + 1,                        rect[i].right(),                        rect[i].bottom());            break;        case BOTTOM:            x.setCoords(rect[i].left(),                        rect[i].top() + ext,                        rect[i].right(),                        rect[i].bottom());            s.setCoords(rect[i].left(),                        rect[i].top(),                        rect[i].right(),                        x.top() - 1);            break;        default:            Q_ASSERT(false);        }        if (relayout_type == QInternal::RelayoutNormal || layout_info[i].is_dummy) {            QRect vr = QStyle::visualRect(QApplication::layoutDirection(), r, x);            layout_info[i].item->setGeometry(vr);        }        if (relayout_type == QInternal::RelayoutNormal) {            QRect vr = QStyle::visualRect(QApplication::layoutDirection(), r, s);            layout_info[i].sep->setGeometry(vr);        }    }    if (layout_info[CENTER].item) {        QRect c;        c.setCoords(left.right() + 1,                    top.bottom() + 1,                    right.left() - 1,                    bottom.top() - 1);        layout_info[CENTER].size = c.size();        if (relayout_type == QInternal::RelayoutNormal) {            QRect vr = QStyle::visualRect(QApplication::layoutDirection(), r, c);            layout_info[CENTER].item->setGeometry(vr);        }    }}void QMainWindowLayout::addItem(QLayoutItem *){ qWarning("QMainWindowLayout: please use the public QMainWindow API instead."); }QSize QMainWindowLayout::sizeHint() const{    if (!szHint.isValid()) {        int left = 0, right = 0, top = 0, bottom = 0;#ifndef QT_NO_TOOLBAR        // layout toolbars        for (int line = 0; line < tb_layout_info.size(); ++line) {            const ToolBarLineInfo &lineInfo = tb_layout_info.at(line);            QSize sz;            // need to get the biggest size hint for all tool bars on each line            for (int i = 0; i < lineInfo.list.size(); ++i) {                const ToolBarLayoutInfo &info = lineInfo.list.at(i);                QSize ms = info.item->sizeHint();                if (((lineInfo.pos == LEFT || lineInfo.pos == RIGHT) && (ms.width() > sz.width()))                    || (ms.height() > sz.height()))                    sz = ms;            }            switch (lineInfo.pos) {            case LEFT:                left += sz.width();                break;            case RIGHT:                right += sz.width();                break;            case TOP:                top += sz.height();                break;            case BOTTOM:                bottom += sz.height();                break;            default:                Q_ASSERT_X(false, "QMainWindowLayout", "internal error");            }        }#endif // QT_NO_TOOLBAR        const QSize szC = layout_info[CENTER].item                          ? layout_info[CENTER].item->sizeHint()                          : QSize(0, 0),                    szL = layout_info[LEFT].item                          ? layout_info[LEFT].item->sizeHint()                          : QSize(0, 0),                    szT = layout_info[TOP].item                          ? layout_info[TOP].item->sizeHint()                          : QSize(0, 0),                    szR = layout_info[RIGHT].item                          ? layout_info[RIGHT].item->sizeHint()                          : QSize(0, 0),                    szB = layout_info[BOTTOM].item                          ? layout_info[BOTTOM].item->sizeHint()                          : QSize(0, 0);        int h1, h2, h3, w1, w2, w3;        w1 = (corners[Qt::TopLeftCorner] == Qt::LeftDockWidgetArea ? szL.width() : 0)             + szT.width()             + (corners[Qt::TopRightCorner] == Qt::RightDockWidgetArea ? szR.width() : 0);        w2 = szL.width() + szR.width() + szC.width();        w3 = (corners[Qt::BottomLeftCorner] == Qt::LeftDockWidgetArea ? szL.width() : 0)             + szB.width()             + (corners[Qt::BottomRightCorner] == Qt::RightDockWidgetArea ? szR.width(): 0);        h1 = (corners[Qt::TopLeftCorner] == Qt::TopDockWidgetArea ? szT.height() : 0)             + szL.height()             + (corners[Qt::BottomLeftCorner] == Qt::BottomDockWidgetArea ? szB.height(): 0);        h2 = szT.height() + szB.height() + szC.height();        h3 = (corners[Qt::TopRightCorner] == Qt::TopDockWidgetArea ? szT.height() : 0)             + szR.height()             + (corners[Qt::BottomRightCorner] == Qt::BottomDockWidgetArea ? szB.height() : 0);        const int ext = parentWidget()->style()->pixelMetric(QStyle::PM_DockWidgetSeparatorExtent);        if (layout_info[LEFT].item && !szL.isEmpty())            left += ext;        if (layout_info[RIGHT].item && !szR.isEmpty())            right += ext;        if (layout_info[TOP].item && !szT.isEmpty())            top += ext;        if (layout_info[BOTTOM].item && !szB.isEmpty())            bottom += ext;        VDEBUG("QMainWindowLayout::sizeHint:\n"               "    %4dx%4d (l %4d r %4d t %4d b %4d w1 %4d w2 %4d w3 %4d, h1 %4d h2 %4d h3 %4d)",               qMax(qMax(w1,w2),w3), qMax(qMax(h1,h2),h3),               left, right, top, bottom, w1, w2, w3, h1, h2, h3);        QSize szSB = statusbar ? statusbar->sizeHint() : QSize(0, 0);        szHint = QSize(qMax(szSB.width(), qMax(qMax(w1,w2),w3) + left + right),                       szSB.height() + qMax(qMax(h1,h2),h3) + top + bottom);    }    return szHint;}QSize QMainWindowLayout::minimumSize() const{    if (!minSize.isValid()) {        int left = 0, right = 0, top = 0, bottom = 0;#ifndef QT_NO_TOOLBAR        // layout toolbars        for (int line = 0; line < tb_layout_info.size(); ++line) {            const ToolBarLineInfo &lineInfo = tb_layout_info.at(line);            QSize sz;            // need to get the biggest min size for all tool bars on each line            for (int i = 0; i < lineInfo.list.size(); ++i) {                const ToolBarLayoutInfo &info = lineInfo.list.at(i);                QSize ms = info.item->minimumSize();                if (((lineInfo.pos == LEFT || lineInfo.pos == RIGHT) && (ms.width() > sz.width()))                    || (ms.height() > sz.height()))                    sz = ms;            }            switch (lineInfo.pos) {            case LEFT:                left += sz.width();                break;            case RIGHT:                right += sz.width();                break;            case TOP:                top += sz.height();                break;            case BOTTOM:                bottom += sz.height();                break;            default:                Q_ASSERT_X(false, "QMainWindowLayout", "internal error");            }        }#endif // QT_NO_TOOLBAR        const QSize szC = layout_info[CENTER].item                          ? layout_info[CENTER].item->minimumSize()                          : QSize(0, 0),                    szL = layout_info[LEFT].item                          ? layout_info[LEFT].item->minimumSize()                          : QSize(0, 0),                    szT = layout_info[TOP].item                          ? layout_info[TOP].item->minimumSize()                          : QSize(0, 0),                    szR = layout_info[RIGHT].item                          ? layout_info[RIGHT].item->minimumSize()                          : QSize(0, 0),                    szB = layout_info[BOTTOM].item                          ? layout_info[BOTTOM].item->minimumSize()                          : QSize(0, 0);        int h1, h2, h3, w1, w2, w3;        w1 = (corners[Qt::TopLeftCorner] == Qt::LeftDockWidgetArea ? szL.width() : 0)             + szT.width()             + (corners[Qt::TopRightCorner] == Qt::RightDockWidgetArea ? szR.width() : 0);        w2 = szL.width() + szR.width() + szC.width();        w3 = (corners[Qt::BottomLeftCorner] == Qt::LeftDockWidgetArea ? szL.width() : 0)             + szB.width()             + (corners[Qt::BottomRightCorner] == Qt::RightDockWidgetArea ? szR.width() : 0);        h1 = (corners[Qt::TopLeftCorner] == Qt::TopDockWidgetArea ? szT.height() : 0)             + szL.height()             + (corners[Qt::BottomLeftCorner] == Qt::BottomDockWidgetArea ? szB.height() : 0);        h2 = szT.height() + szB.height() + szC.height();        h3 = (corners[Qt::TopRightCorner] == Qt::TopDockWidgetArea ? szT.height() : 0)             + szR.height()             + (corners[Qt::BottomRightCorner] == Qt::BottomDockWidgetArea ? szB.height() : 0);        const int ext = parentWidget()->style()->pixelMetric(QStyle::PM_DockWidgetSeparatorExtent);        if (layout_info[LEFT].item && !szL.isEmpty())            left += ext;        if (layout_info[RIGHT].item && !szR.isEmpty())            right += ext;        if (layout_info[TOP].item && !szT.isEmpty())            top += ext;        if (layout_info[BOTTOM].item && !szB.isEmpty())            bottom += ext;        VDEBUG("QMainWindowLayout::minimumSize:\n"               "    %4dx%4d (l %4d r %4d t %4d b %4d w1 %4d w2 %4d w3 %4d, h1 %4d h2 %4d h3 %4d)",               qMax(qMax(w1,w2),w3), qMax(qMax(h1,h2),h3),               left, right, top, bottom, w1, w2, w3, h1, h2, h3);        QSize szSB = statusbar ? statusbar->minimumSize() : QSize(0, 0);        minSize =  QSize(qMax(szSB.width(), qMax(qMax(w1,w2),w3) + left + right),                         szSB.height() + qMax(qMax(h1,h2),h3) + top + bottom);    }    return minSize;}void QMainWindowLayout::relayout(QInternal::RelayoutType type){    QRect g = geometry();    if (g.isValid()) {        QInternal::RelayoutType save_type = relayout_type;        relayout_type = type;        setGeometry(g);        relayout_type = save_type;    } else {        update();    }}void QMainWindowLayout::invalidate(){    if (relayout_type != QInternal::RelayoutDragging) {        QLayout::invalidate();        minSize = szHint = QSize();    }}void QMainWindowLayout::saveLayoutInfo(){    Q_ASSERT(save_layout_info == 0);    save_layout_info = new QVector<QMainWindowLayoutInfo>(layout_info);    relayout_type = QInternal::RelayoutDragging;#ifndef QT_NO_DOCKWIDGET    for (int i = 0; i < 4; ++i) {        if (!layout_info[i].item) continue;        QDockWidgetLayout *layout =            qobject_cast<QDockWidgetLayout *>(layout_info[i].item->layout());        Q_ASSERT(layout != 0);        layout->saveLayoutInfo();    }#endif}void QMainWindowLayout::resetLayoutInfo(){    Q_ASSERT(save_layout_info != 0);    layout_info = *save_layout_info;#ifndef QT_NO_DOCKWIDGET    for (int i = 0; i < 4; ++i) {        if (!layout_info[i].item) continue;        QDockWidgetLayout *layout =            qobject_cast<QDockWidgetLayout *>(layout_info[i].item->layout());        Q_ASSERT(layout != 0);        layout->resetLayoutInfo();    }#endif}void QMainWindowLayout::discardLayoutInfo(){    Q_ASSERT(save_layout_info != 0);    delete save_layout_info;    save_layout_info = 0;    relayout_type = QInternal::RelayoutNormal;#ifndef QT_NO_DOCKWIDGET    for (int i = 0; i < 4; ++i) {        if (!layout_info[i].item) continue;        QDockWidgetLayout *layout =            qobject_cast<QDockWidgetLayout *>(layout_info[i].item->layout());        Q_ASSERT(layout != 0);        layout->discardLayoutInfo();    }#endif}void QMainWindowLayout::beginConstrain(){#ifndef QT_NO_TOOLBAR    save_tb_layout_info = new QList<ToolBarLineInfo>(tb_layout_info);#endif}void QMainWindowLayout:: endConstrain(){#ifndef QT_NO_TOOLBAR    delete save_tb_layout_info;    save_tb_layout_info = 0;#endif}#ifndef QT_NO_DOCKWIDGETint QMainWindowLayout::constrain(QDockWidgetLayout *dock, int delta){    QVector<QMainWindowLayoutInfo> info = save_layout_info ? *save_layout_info : layout_info;    const POSITION order[] = {        //

⌨️ 快捷键说明

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