Qt从布局添加和删除小部件的正确方法

时间:2016-08-12 07:54:35

标签: qt layout widget

我知道在不同的帖子中已多次询问过这个问题,但我仍然不相信我的实施是最好的解决方案。

我有一个QVBoxLayout,我在其中添加了一个包含小部件的QHBoxLayout。默认情况下,QVBoxLayout为空。

我使用此代码删除所有布局小部件,但小部件可以触发信号。这节省吗?另外,我宁愿将其更改为递归函数,如https://stackoverflow.com/questions/4272196/qt-remove-all-widgets-from-layout/7077340#=

所示
QLayoutItem *child;
while ((child = ui->verticalLayoutAmplitude->takeAt(0)) != 0)  {
    QLayoutItem * subchild;
    while ((subchild = child->layout()->takeAt(0)) != 0)  {
        delete subchild->widget();
        delete subchild;
    }
    delete child->widget();
    delete child;
}

我不明白为什么它如此复杂。

小部件的创建也可能不同 父布局不能用于创建窗口小部件。 因此,只插入了MainWindow作为父类。 我想知道还有什么应该作为父类插入?

for (int i = 0; i < parameterList.size(); ++i) {

    QString valueName = parameterList.at(i);
    double value = parameter(valueName);

    QHBoxLayout * hLayout = new QHBoxLayout(this);
    QDoubleSpinBox * spinbox = new QDoubleSpinBox();
    QLabel * label = new QLabel();
    label->setText(valueName);
    spinbox->setValue(value);

    hLayout->addWidget(label, 1);
    hLayout->addWidget(spinbox, 3);
    ui->verticalLayoutAmplitude->addLayout(hLayout);
}

0 个答案:

没有答案