📄 qtoolbararealayout.cpp
字号:
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 ¢erMin) 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 ¢erHint) 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 + -