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

📄 qtoolbararealayout.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    if (rect.contains(pos)) {        for (int j = 0; j < lines.count(); ++j) {            const QToolBarAreaLayoutLine &line = lines.at(j);            if (line.skip())                continue;            if (!line.rect.contains(pos))                continue;            int k = 0;            for (; k < line.toolBarItems.count(); ++k) {                const QToolBarAreaLayoutItem &item = line.toolBarItems.at(k);                if (item.skip())                    continue;                int size = qMin(item.size, pick(o, item.sizeHint()));                if (p > item.pos + size)                    continue;                if (p > item.pos + size/2)                    ++k;                break;            }            QList<int> result;            result << j << k;            return result;        }    } else if (appendLineDropRect().contains(pos)) {        QList<int> result;        result << lines.count() << 0;        return result;    }    return QList<int>();}bool QToolBarAreaLayoutInfo::insertGap(QList<int> path, QLayoutItem *item){    int j = path.at(0);    if (j == lines.count())        lines.append(QToolBarAreaLayoutLine(o));    QToolBarAreaLayoutLine &line = lines[j];    int k = path.at(1);    QToolBarAreaLayoutItem gap_item;    gap_item.gap = true;    gap_item.widgetItem = item;    line.toolBarItems.insert(k, gap_item);    return true;}void QToolBarAreaLayoutInfo::clear(){    lines.clear();    rect = QRect(0, 0, -1, -1);}QRect QToolBarAreaLayoutInfo::itemRect(QList<int> path) const{    int j = path.at(0);    int k = path.at(1);    const QToolBarAreaLayoutLine &line = lines.at(j);    const QToolBarAreaLayoutItem &item = line.toolBarItems.at(k);    QRect result = line.rect;    if (o == Qt::Horizontal) {        result.setLeft(item.pos + line.rect.left());        result.setWidth(item.size);    } else {        result.setTop(item.pos + line.rect.top());        result.setHeight(item.size);    }    return result;}QRect QToolBarAreaLayoutInfo::appendLineDropRect() const{    QRect result;    switch (dockPos) {        case QInternal::LeftDock:            result = QRect(rect.right(), rect.top(),                            EmptyDockAreaSize, rect.height());            break;        case QInternal::RightDock:            result = QRect(rect.left() - EmptyDockAreaSize, rect.top(),                            EmptyDockAreaSize, rect.height());            break;        case QInternal::TopDock:            result = QRect(rect.left(), rect.bottom() + 1,                            rect.width(), EmptyDockAreaSize);            break;        case QInternal::BottomDock:            result = QRect(rect.left(), rect.top() - EmptyDockAreaSize,                            rect.width(), EmptyDockAreaSize);            break;        default:            break;    }    return result;}/******************************************************************************** QToolBarAreaLayout*/QToolBarAreaLayout::QToolBarAreaLayout(QMainWindow *win){    visible = true;    mainWindow = win;    for (int i = 0; i < QInternal::DockCount; ++i) {        QInternal::DockPosition pos = static_cast<QInternal::DockPosition>(i);        docks[i] = QToolBarAreaLayoutInfo(pos);    }}QRect QToolBarAreaLayout::fitLayout(){    if (!visible)        return rect;    QSize left_hint = docks[QInternal::LeftDock].sizeHint();    QSize right_hint = docks[QInternal::RightDock].sizeHint();    QSize top_hint = docks[QInternal::TopDock].sizeHint();    QSize bottom_hint = docks[QInternal::BottomDock].sizeHint();    QRect center = rect.adjusted(left_hint.width(), top_hint.height(),                                    -right_hint.width(), -bottom_hint.height());    docks[QInternal::TopDock].rect = QRect(rect.left(), rect.top(),                                rect.width(), top_hint.height());    docks[QInternal::LeftDock].rect = QRect(rect.left(), center.top(),                                left_hint.width(), center.height());    docks[QInternal::RightDock].rect = QRect(center.right() + 1, center.top(),                                    right_hint.width(), center.height());    docks[QInternal::BottomDock].rect = QRect(rect.left(), center.bottom() + 1,                                    rect.width(), bottom_hint.height());    if (!mainWindow->unifiedTitleAndToolBarOnMac()) {        docks[QInternal::TopDock].fitLayout();    }    docks[QInternal::LeftDock].fitLayout();    docks[QInternal::RightDock].fitLayout();    docks[QInternal::BottomDock].fitLayout();    return center;}QSize QToolBarAreaLayout::minimumSize(const QSize &centerMin) const{    if (!visible)        return centerMin;    QSize result = centerMin;    QSize left_min = docks[QInternal::LeftDock].minimumSize();    QSize right_min = docks[QInternal::RightDock].minimumSize();    QSize top_min = docks[QInternal::TopDock].minimumSize();    QSize bottom_min = docks[QInternal::BottomDock].minimumSize();    result.setWidth(qMax(top_min.width(), result.width()));    result.setWidth(qMax(bottom_min.width(), result.width()));    result.setHeight(qMax(left_min.height(), result.height()));    result.setHeight(qMax(right_min.height(), result.height()));    result.rwidth() += left_min.width() + right_min.width();    result.rheight() += top_min.height() + bottom_min.height();    return result;}QSize QToolBarAreaLayout::sizeHint(const QSize &centerHint) const{    if (!visible)        return centerHint;    QSize result = centerHint;    QSize left_hint = docks[QInternal::LeftDock].sizeHint();    QSize right_hint = docks[QInternal::RightDock].sizeHint();    QSize top_hint = docks[QInternal::TopDock].sizeHint();    QSize bottom_hint = docks[QInternal::BottomDock].sizeHint();    result.setWidth(qMax(top_hint.width(), result.width()));    result.setWidth(qMax(bottom_hint.width(), result.width()));    result.setHeight(qMax(left_hint.height(), result.height()));    result.setHeight(qMax(right_hint.height(), result.height()));    result.rwidth() += left_hint.width() + right_hint.width();    result.rheight() += top_hint.height() + bottom_hint.height();    return result;}QRect QToolBarAreaLayout::rectHint(const QRect &r) const{    int coef = visible ? 1 : -1;    QRect result = r;    QSize left_hint = docks[QInternal::LeftDock].sizeHint();    QSize right_hint = docks[QInternal::RightDock].sizeHint();    QSize top_hint = docks[QInternal::TopDock].sizeHint();    QSize bottom_hint = docks[QInternal::BottomDock].sizeHint();    result.adjust(-left_hint.width()*coef, -top_hint.height()*coef,                    right_hint.width()*coef, bottom_hint.height()*coef);    return result;}QLayoutItem *QToolBarAreaLayout::itemAt(int *x, int index) const{    Q_ASSERT(x != 0);    for (int i = 0; i < QInternal::DockCount; ++i) {        const QToolBarAreaLayoutInfo &dock = docks[i];        for (int j = 0; j < dock.lines.count(); ++j) {            const QToolBarAreaLayoutLine &line = dock.lines.at(j);            for (int k = 0; k < line.toolBarItems.count(); ++k) {                if ((*x)++ == index)                    return line.toolBarItems.at(k).widgetItem;            }        }    }    return 0;}QLayoutItem *QToolBarAreaLayout::takeAt(int *x, int index){    Q_ASSERT(x != 0);    for (int i = 0; i < QInternal::DockCount; ++i) {        QToolBarAreaLayoutInfo &dock = docks[i];        for (int j = 0; j < dock.lines.count(); ++j) {            QToolBarAreaLayoutLine &line = dock.lines[j];            for (int k = 0; k < line.toolBarItems.count(); ++k) {                if ((*x)++ == index) {                    QLayoutItem *result = line.toolBarItems.takeAt(k).widgetItem;                    if (line.toolBarItems.isEmpty())                        dock.lines.removeAt(j);                    return result;                }            }        }    }    return 0;}void QToolBarAreaLayout::deleteAllLayoutItems(){    for (int i = 0; i < QInternal::DockCount; ++i) {        QToolBarAreaLayoutInfo &dock = docks[i];        for (int j = 0; j < dock.lines.count(); ++j) {            QToolBarAreaLayoutLine &line = dock.lines[j];            for (int k = 0; k < line.toolBarItems.count(); ++k) {                QToolBarAreaLayoutItem &item = line.toolBarItems[k];                delete item.widgetItem;                item.widgetItem = 0;            }        }    }}QInternal::DockPosition QToolBarAreaLayout::findToolBar(QToolBar *toolBar) const{    for (int i = 0; i < QInternal::DockCount; ++i) {        const QToolBarAreaLayoutInfo &dock = docks[i];        for (int j = 0; j < dock.lines.count(); ++j) {            const QToolBarAreaLayoutLine &line = dock.lines.at(j);            for (int k = 0; k < line.toolBarItems.count(); ++k) {                if (line.toolBarItems.at(k).widgetItem->widget() == toolBar)                    return static_cast<QInternal::DockPosition>(i);            }        }    }    return QInternal::DockCount;}void QToolBarAreaLayout::insertToolBar(QToolBar *before, QToolBar *toolBar){    QInternal::DockPosition pos = findToolBar(before);    if (pos == QInternal::DockCount)        return;    docks[pos].insertToolBar(before, toolBar);}void QToolBarAreaLayout::removeToolBar(QToolBar *toolBar){    QInternal::DockPosition pos = findToolBar(toolBar);    if (pos == QInternal::DockCount)        return;    docks[pos].removeToolBar(toolBar);}void QToolBarAreaLayout::addToolBar(QInternal::DockPosition pos, QToolBar *toolBar){    docks[pos].insertToolBar(0, toolBar);}void QToolBarAreaLayout::insertToolBarBreak(QToolBar *before){    QInternal::DockPosition pos = findToolBar(before);    if (pos == QInternal::DockCount)        return;    docks[pos].insertToolBarBreak(before);}void QToolBarAreaLayout::removeToolBarBreak(QToolBar *before){    QInternal::DockPosition pos = findToolBar(before);    if (pos == QInternal::DockCount)        return;    docks[pos].removeToolBarBreak(before);}void QToolBarAreaLayout::addToolBarBreak(QInternal::DockPosition pos){    docks[pos].insertToolBarBreak(0);}void QToolBarAreaLayout::apply(bool animate){    QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());    Q_ASSERT(layout != 0);    Qt::LayoutDirection dir = mainWindow->layoutDirection();    for (int i = 0; i < QInternal::DockCount; ++i) {        const QToolBarAreaLayoutInfo &dock = docks[i];        for (int j = 0; j < dock.lines.count(); ++j) {            const QToolBarAreaLayoutLine &line = dock.lines.at(j);            if (line.skip())                continue;            for (int k = 0; k < line.toolBarItems.count(); ++k) {                const QToolBarAreaLayoutItem &item = line.toolBarItems.at(k);                if (item.skip() || item.gap)                    continue;                QRect r;                if (visible) {                    if (line.o == Qt::Horizontal) {                        r.setTop(line.rect.top());                        r.setBottom(line.rect.bottom());                        r.setLeft(line.rect.left() + item.pos);                        r.setRight(line.rect.left() + item.pos + item.size - 1);                    } else {                        r.setLeft(line.rect.left());

⌨️ 快捷键说明

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