Qt布局(layout)->setSizeConstraint

3

我在Qt 5中的布局()遇到了问题。 我想制作一个动态变量对话框。 ![enter image description here][1] 以下是构造函数的代码:

SortDialog :: SortDialog (QWidget * parent)
     : QDialog (parent)
{
     setupUi (this);

     SecondaryGroupBox-> hide ();
     TertiaryGroupBox-> hide ();
     layout () -> setSizeConstraint (QLayout :: SetFixedSize);
     setColumnRange ('A', 'Z');
}

项目已成功构建,但当您开始从操作系统接收信号时出现问题。
Signal: SIGSEGV
Purpose: Segmentation fault

如果您删除了一行数据
layout () -> setSizeConstraint (QLayout :: SetFixedSize);

程序正常工作。 请帮助我。 附:这是来自《c++ GUI Programmming with Qt 4》书籍第31页的示例。


1
你的对话框是否实际上有布局? - thuga
通常情况下,当您访问超出范围的内存时,会导致分段错误。最好通过调试器运行它,并找到具体崩溃在哪一行。 - Nicholas Smith
为什么在layout()中要加括号?layout()?? - otisonoza
4个回答

4
我遇到了同样的问题,但我已经解决了。也许两年后你不需要答案,但我真的想在某个地方写下这个问题,因为网络上没有任何关于这个小问题的内容。
问题是Qt Designer没有生成设置对话框布局的代码。我只需打开ui_sortdialog.h文件,发现在SortDialog之外创建了一个小部件(widget)。然后使用此小部件创建了一个布局(layout)。该布局称为gridLayout_4,并将表单中的每个小部件和布局都添加到此布局中。当我在函数retranslateUi中添加了一行SortDialog->setLayout(gridLayout_4);时,一切都正常工作了。生成的代码创建了布局并完成了所有需要完成的工作,但它没有给SortDialog留下任何与布局相关的参考,因此layout()返回0。

2

这是因为您没有创建布局。

返回设计器,单击表单并选择网格布局。

如果您不这样做,布局将为0,程序将崩溃。


谢谢,这正是我的问题! - partyd

0

你需要创建一个布局,就像QVBoxLayout一样。

QVBoxLayout *layout = new QVBoxLayout;
layout->setSizeConstraint (QLayout :: SetFixedSize);
setLayout(layout);

0

我通过在设计师表单中进行更改来解决了这个问题。确保Qt Designer中的布局良好。特别是最后的“表单 -> 调整大小”。(在书的第33页;创建一个“表单 -> 在网格中布置”)。使用书中的原始代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接