Qt小部件大小在运行时重新计算

时间:2012-01-20 09:01:57

标签: c++ qt widget size runtime

在运行时添加新小部件时,我在Qt中的大小计算有问题。 我试图用那里的修剪程序说明问题。希望它显示出与我的其他(更复杂)程序相同的问题:

显示小部件后,使用:

w->show();

...稍后会添加一些新的小部件(可能w有布局), 我应该怎么做才能重新显示w及其父级,以便考虑新添加的子窗口小部件的大小? 我想要的行为是大小重新计算向上传播到最近的滚动对象(如果没有滚动对象,则传播到主窗口)

在下面的示例中,我创建了一个小小部件结构:如果删除了对show()(注释SHOW1)的调用,则在第一次调用show()之前定义整个小部件结构作品。 但是:如果我打电话给show()(在SHOW1),那么最后一个节目不会显示正确的内容:框架仍然太小

 #include <QApplication>
 #include <QtCore>
 #include <QMainWindow>
 #include <QTabWidget>
 #include <QWidget>
 #include <QGroupBox>
 #include <QVBoxLayout>
 #include <QLabel>

 #include <stdlib.h>


 int main(int argc, char *argv[])
 {
    QApplication app(argc, argv);
    QMainWindow* main_window = new(QMainWindow);
    main_window->setObjectName("main_window");
    main_window->resize(800, 600);
    main_window->setWindowTitle("Hello");

    QTabWidget* node_tab_widget = new QTabWidget(main_window);
    node_tab_widget->setObjectName(QString::fromUtf8("tab_widget"));

    QWidget* w= new QWidget(node_tab_widget);
    node_tab_widget->addTab(w, "TAB");

    QGroupBox* group_widget = new QGroupBox("GROUPNAME", w);
    QVBoxLayout*  group_layout = new QVBoxLayout;
    group_widget->setLayout(group_layout);
    group_layout->addWidget((QLabel*)new QLabel(">>>>>>>>>>>>>>>>>>>>>>>>>here1"));

    main_window->show();  // SHOW1: If this one is commented, then OK!

    group_layout->addWidget((QLabel*)new QLabel("here2"));
    group_layout->addWidget((QLabel*)new QLabel("here2"));
    group_layout->addWidget((QLabel*)new QLabel("here2"));
    group_layout->addWidget((QLabel*)new QLabel("here2"));

    main_window->setCentralWidget(node_tab_widget);

    // main_window->update();
    // main_window->hide();

    main_window->show(); // How to I get that to recaclulate the size of its contents?
    return app.exec();
 }

1 个答案:

答案 0 :(得分:2)

您的w窗口小部件没有布局。创建group_widget后尝试添加以下行:

QVBoxLayout *wlayout = new QVBoxLayout(w);
wlayout->addWidget(group_widget);
wlayout->addStretch();

如果您确实希望addStretch跨越整个父母,则可以摆脱w