在运行时添加新窗口小部件时,我在Qt中计算大小时遇到问题。 我试图说明那里的修剪程序的问题。我们希望,这显示出比我的其他(更复杂)的程序相同的问题:运行时Qt窗口小部件大小重新计算
当构件已被证明,使用:
w->show();
......以及一些新的小部件添加到它以后(可能w
有布局), 我应该怎么做才能重新显示w
及其父母,以便将新添加的子窗口小部件的大小考虑在内? 我想要的行为是大小重新计算向上传播到最近的滚动对象(或如果不存在滚动对象主窗口)
在下面的例子中,创建了一个小部件的结构:如果调用show()
(注释SHOW1)被删除,然后在第一次调用show()
之前定义了整个构件结构,并且一切正常。 但是:如果我不叫show()
(在秀王),那么最后显示不显示正确的事:框架还是太小
#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();
}
我会稍微提交一个更详细的答案。简单地说:我相信解决方案将依赖任何子部件,这些子部件决定父级的大小,并且提供合理的['minimumSize'](http://developer.qt.nokia .com/doc/qt-4.8/qwidget.html#minimumSize-prop)。 – sjwarner
一个小点,但我建议你尽量保持你的编码风格一致。您在该代码中使用了三种不同形式的'new':'new(QMainWindow)','new QTabWidget(main_window)'和'new QVBoxLayout'。您可能会发现[此问题的](http://stackoverflow.com/q/1885849/594137)答案是有用的。 –