qlayout_widget.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 1,050 行 · 第 1/3 页
CPP
1,050 行
} m_indicatorLeft->hide(); m_indicatorTop->hide(); }}int QLayoutSupport::indexOf(QLayoutItem *i) const{ if (!layout()) return -1; int index = 0; while (QLayoutItem *item = layout()->itemAt(index)) { if (item == i) return index; ++index; } return -1;}int QLayoutSupport::indexOf(QWidget *widget) const{ if (!layout()) return -1; int index = 0; while (QLayoutItem *item = layout()->itemAt(index)) { if (item->widget() == widget) return index; ++index; } return -1;}QDesignerFormEditorInterface *QLayoutSupport::core() const{ return formWindow()->core();}void QLayoutSupport::removeWidget(QWidget *widget){ LayoutInfo::Type layoutType = LayoutInfo::layoutType(core(), m_widget); switch (layoutType) { case LayoutInfo::Grid: { int index = indexOf(widget); if (index != -1) { QGridLayout *gridLayout = qobject_cast<QGridLayout*>(layout()); Q_ASSERT(gridLayout); int row, column, rowspan, colspan; gridLayout->getItemPosition(index, &row, &column, &rowspan, &colspan); gridLayout->takeAt(index); QSpacerItem *spacer = new QSpacerItem(20, 20); gridLayout->addItem(spacer, row, column, rowspan, colspan); } } break; case LayoutInfo::VBox: case LayoutInfo::HBox: { QBoxLayout *box = static_cast<QBoxLayout*>(layout()); box->removeWidget(widget); } break; default: break; }}QList<QWidget*> QLayoutSupport::widgets(QLayout *layout) const{ if (!layout) return QList<QWidget*>(); QList<QWidget*> lst; int index = 0; while (QLayoutItem *item = layout->itemAt(index)) { ++index; QWidget *widget = item->widget(); if (widget && formWindow()->isManaged(widget)) lst.append(widget); } return lst;}void QLayoutSupport::insertWidget(QWidget *widget, const QPair<int, int> &cell){ QDesignerFormEditorInterface *core = formWindow()->core(); LayoutInfo::Type lt = LayoutInfo::layoutType(core, layout()); switch (lt) { case LayoutInfo::VBox: { QVBoxLayout *vbox = static_cast<QVBoxLayout*>(layout()); insert_into_box_layout(vbox, cell.first, widget); } break; case LayoutInfo::HBox: { QHBoxLayout *hbox = static_cast<QHBoxLayout*>(layout()); insert_into_box_layout(hbox, cell.second, widget); } break; case LayoutInfo::Grid: { int index = findItemAt(cell.first, cell.second); Q_ASSERT(index != -1); insertWidget(index, widget); } break; default: {#ifdef QD_DEBUG qDebug() << "expected a layout here!"; Q_ASSERT(0);#endif } } // end switch}int QLayoutSupport::findItemAt(int at_row, int at_column) const{ if (QGridLayout *gridLayout = qobject_cast<QGridLayout*>(layout())) return findItemAt(gridLayout, at_row, at_column); return -1;}int QLayoutSupport::findItemAt(QGridLayout *gridLayout, int at_row, int at_column){ Q_ASSERT(gridLayout); int index = 0; while (gridLayout->itemAt(index)) { int row, column, rowspan, colspan; gridLayout->getItemPosition(index, &row, &column, &rowspan, &colspan); if (at_row >= row && at_row < (row + rowspan) && at_column >= column && at_column < (column + colspan)) return index; ++index; } return -1;}QLayoutWidgetItem::QLayoutWidgetItem(QWidget *widget) : QWidgetItem(widget){}void QLayoutWidgetItem::setGeometry(const QRect &r){ widget()->setGeometry(r);}QSize QLayoutWidgetItem::sizeHint() const{ if (QLayout *l = theLayout()) return l->sizeHint(); return QWidgetItem::sizeHint();}QSize QLayoutWidgetItem::minimumSize() const{ if (QLayout *l = theLayout()) return l->minimumSize(); return QWidgetItem::minimumSize();}QSize QLayoutWidgetItem::maximumSize() const{ if (QLayout *l = theLayout()) return l->maximumSize(); return QWidgetItem::maximumSize();}Qt::Orientations QLayoutWidgetItem::expandingDirections() const{ if (QLayout *l = theLayout()) return l->expandingDirections(); return QWidgetItem::expandingDirections();}void QLayoutWidgetItem::addTo(QLayout *layout){ static_cast<qdesigner_internal::FriendlyLayout*>(layout)->addChildWidget(widget());}bool QLayoutWidgetItem::hasHeightForWidth() const{ if (QLayout *l = theLayout()) return l->hasHeightForWidth(); return QWidgetItem::hasHeightForWidth();}int QLayoutWidgetItem::heightForWidth(int w) const{ if (QLayout *l = theLayout()) return l->heightForWidth(w); return QWidgetItem::heightForWidth(w);}int QLayoutWidgetItem::minimumHeightForWidth(int w) const{ if (QLayout *l = theLayout()) return l->minimumHeightForWidth(w); return QWidgetItem::minimumHeightForWidth(w);}void QLayoutWidgetItem::removeFrom(QLayout *layout){ Q_UNUSED(layout);}void QLayoutSupport::insertWidget(int index, QWidget *widget){ QGridLayout *gridLayout = qobject_cast<QGridLayout*>(layout()); QLayoutItem *item = gridLayout->itemAt(index); if (!item || !isEmptyItem(item)) { qDebug() << "the cell is not empty"; return; } int row, column, rowspan, colspan; gridLayout->getItemPosition(index, &row, &column, &rowspan, &colspan); gridLayout->takeAt(index); add_to_grid_layout(gridLayout, widget, row, column, rowspan, colspan); delete item;}void QLayoutSupport::createEmptyCells(QGridLayout *&gridLayout){ Q_ASSERT(gridLayout); { // take the spacers items int index = 0; while (QLayoutItem *item = gridLayout->itemAt(index)) { if (QSpacerItem *spacer = item->spacerItem()) { gridLayout->takeAt(index); delete spacer; // we don't have to increment the `index' here! } else ++index; } } QMap<QPair<int,int>, QLayoutItem*> cells; for (int r = 0; r < gridLayout->rowCount(); ++r) { for (int c = 0; c < gridLayout->columnCount(); ++c) { QPair<int,int> cell = qMakePair(r, c); cells.insert(cell, 0); } } int index = 0; while (QLayoutItem *item = gridLayout->itemAt(index)) { int row, column, rowspan, colspan; gridLayout->getItemPosition(index, &row, &column, &rowspan, &colspan); ++index; for (int r = row; r < row + rowspan; ++r) { for (int c = column; c < column + colspan; ++c) { QPair<int,int> cell = qMakePair(r, c); cells[cell] = item; if (!item) { /* skip */ } else if (item->layout()) { qDebug("unexpected layout"); } else if (item->spacerItem()) { qDebug("unexpected spacer"); } } } } QMapIterator<QPair<int,int>, QLayoutItem*> it(cells); while (it.hasNext()) { it.next(); const QPair<int, int> &cell = it.key(); QLayoutItem *item = it.value(); if (!item || !item->widget() && findItemAt(gridLayout, cell.first, cell.second) == -1) { gridLayout->addItem(new QSpacerItem(20, 20), cell.first, cell.second); } }}void QLayoutSupport::insertRow(int row){ QHash<QLayoutItem*, QRect> infos; computeGridLayout(&infos); QMutableHashIterator<QLayoutItem*, QRect> it(infos); while (it.hasNext()) { it.next(); QRect info = it.value(); if (info.y() >= row) { info.translate(0, 1); it.setValue(info); } } rebuildGridLayout(&infos); QGridLayout *gridLayout = qobject_cast<QGridLayout*>(layout()); Q_ASSERT(gridLayout); if (gridLayout->rowCount() == row) { gridLayout->addItem(new QSpacerItem(20, 20), gridLayout->rowCount(), 0); } gridLayout = qobject_cast<QGridLayout*>(layout()); Q_ASSERT(gridLayout); createEmptyCells(gridLayout); layout()->activate();}void QLayoutSupport::insertColumn(int column){ QGridLayout *gridLayout = qobject_cast<QGridLayout*>(layout()); if (!gridLayout) return; QHash<QLayoutItem*, QRect> infos; computeGridLayout(&infos); QMutableHashIterator<QLayoutItem*, QRect> it(infos); while (it.hasNext()) { it.next(); QRect info = it.value();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?