3

我在 Qt 5 中的 layout () 有问题。我想制作一个动态变量对话框。![在此处输入图像描述][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);

该程序有效。请帮我。Ps:这是c++ GUI Programmming with Qt 4(第31页)一书中的一个例子

4

4 回答 4

4

我遇到了同样的问题。我刚刚解决了。可能两年后你不想得到答案,但我真的很想在某个地方写下这个,因为网络上没有关于这个小问题的内容。

问题是 Qt Designer 没有生成代码来设置对话框的布局。我刚刚打开 ui_sortdialog.h 并发现在 SortDialog 之外创建了一个小部件。与此小部件相比,将创建一个布局。布局被称为gridLayout_4,并且表单的每个小部件和布局都添加到这个。当我添加到功能retranslateUi行时,SortDialog->setLayout(gridLayout_4);一切正常。生成的代码创建了布局并做了所有需要做的事情,但是它离开了 SortDialog 没有对布局的任何引用,因此layout()返回零。

于 2015-09-12T22:41:59.647 回答
2

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

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

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

于 2016-02-09T13:16:20.967 回答
0

您必须创建一个布局,例如 QVBoxLayout。

QVBoxLayout *layout = new QVBoxLayout;
layout->setSizeConstraint (QLayout :: SetFixedSize);
setLayout(layout);
于 2013-08-05T10:34:37.177 回答
0

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

于 2020-08-07T10:08:38.560 回答