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 + -
显示快捷键?