在运行时添加新小部件时,我在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();
}
答案 0 :(得分:2)
您的w
窗口小部件没有布局。创建group_widget
后尝试添加以下行:
QVBoxLayout *wlayout = new QVBoxLayout(w);
wlayout->addWidget(group_widget);
wlayout->addStretch();
如果您确实希望addStretch
跨越整个父母,则可以摆脱w
。