Qt 3-将一个小部件添加到已经存在的小部件及其布局中



我在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()会使框架消失,我认为可能会隐藏小部件,直到像这样添加时显式显示。

相关内容

  • 没有找到相关文章

最新更新