Qt官方示例-动态布局

2020-06-17 15:27:22 浏览数 (1)

该例子介绍如何在正在运行的应用程序中重新布局控件。

使用

  1. 例子使用QGridLayout布局。
代码语言:javascript复制
mainLayout = new QGridLayout;
mainLayout->addWidget(rotatableGroupBox, 0, 0);
...
setLayout(mainLayout);
  1. rotatableGroupBox为QGroupBox类,并在内部使用了QGridLayout布局。
代码语言:javascript复制
rotatableGroupBox = new QGroupBox(tr("Rotatable Widgets"));

rotatableWidgets.enqueue(new QSpinBox);
rotatableWidgets.enqueue(new QSlider);
rotatableWidgets.enqueue(new QDial);
rotatableWidgets.enqueue(new QProgressBar);
...
/* 绑定QGridLayout布局 */
rotatableLayout = new QGridLayout;
rotatableGroupBox->setLayout(rotatableLayout);

rotateWidgets();
  1. 当我们点击界面按钮Rotate Widgets时会执行下列函数进行重新布局。
代码语言:javascript复制
void Dialog::rotateWidgets()
{
    Q_ASSERT(rotatableWidgets.count() % 2 == 0);

    foreach (QWidget *widget, rotatableWidgets)
        rotatableLayout->removeWidget(widget); /* 移除旧布局 */

    rotatableWidgets.enqueue(rotatableWidgets.dequeue());

    const int n = rotatableWidgets.count();
    for (int i = 0; i < n / 2;   i) {
        /* 重新布局 */
        rotatableLayout->addWidget(rotatableWidgets[n - i - 1], 0, i);
        rotatableLayout->addWidget(rotatableWidgets[i], 1, i);
    }
}

总结

  本文例子中动态布局的主要实现使用了,布局类(QGridLayout)的addWidget和removeWidget操作。

关于更多

  • QtCreator软件可以找到:
  • 或在以下Qt安装目录找到:
代码语言:javascript复制
C:Qt{你的Qt版本}Examples{你的Qt版本}widgetslayoutsdynamiclayouts
  • 相关链接
代码语言:javascript复制
https://doc.qt.io/qt-5/qtwidgets-layouts-dynamiclayouts-example.html

0 人点赞