我在designer中用QFrame
testFrame创建了一个QDialog
,并向其添加了QHBoxLayout
,在创建并显示了整个内容后的某个时刻,我正试图以QFrame
为父级以编程方式创建一个新的小部件。无论我尝试什么,新的小工具都不会显示:
init()方法结束:
QBoxLayout *testFrameLayout = new QHBoxLayout(this->testFrame); //QT3 docs use QBoxLayout pointer when creating QHBoxLayout
在事件期间(例如,按下了单独的按钮)
testButton = new QPushButton(this->testFrame);
testButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed, false);
testButton->setMaximumWidth(50);
testButton->setMaximumHeight(50);
testButton->setMinimumWidth(50);
testButton->setMinimumHeight(50);
testFrameLayout->addWidget(testButton);
我在不同的小部件、容器类(例如QGrid
,我不必管理任何布局的东西)、调用update()/repaint()(在testFrame、testButton、对话框本身上)e.t.c时得到了这种行为,无论我尝试什么,当在init()中完成时都有效,但如果在对话框显示后完成,则无效。我一定是错过了什么,所以任何帮助都将不胜感激!
注意:我正在处理一个使用Qt3的大型项目,因此解决方案必须与此版本兼容。
以下是我的Qt3应用程序中对话框中的一些工作代码:
QVBoxLayout *vb = new QVBoxLayout(this, 5, 5);
// ...
QHBoxLayout *askline = new QHBoxLayout(vb, 10);
QPushButton *ok = new QPushButton(tr("OK"), this);
QPushButton *cancel = new QPushButton(tr("Cancel"), this);
askline->addWidget(ok);
askline->addWidget(cancel);
adjustSize();
// ...
我认为你的问题是布局没有为你的QPushButton
分配任何空间,需要adjustSize()
。
调用
testButton->show();
最终解决了这个问题。由于在框架上使用adjustSize()而在实际按钮上不使用show()会使框架消失,我认为可能会隐藏小部件,直到像这样添加时显式显示。