procs后终止的SIGSEGV调用QWidget.setParent()

时间:2015-07-23 08:56:50

标签: c++ qt

我尝试编写一个qt小部件,用于在尝试打开文件时弹出一个对话框。 我目前到目前为止:

class FileDialog : public QWidget
{
    Q_OBJECT
protected:
    QLineEdit Browser1;
public:
    QWidget Dialog;
    FileDialog();
    ~FileDialog();
};


FileDialog::FileDialog()
{
    Dialog.setFixedSize(600, 250);
    Browser1.setParent(&Dialog); // SIGSEGV comes since I have added this line. Uncommenting fixes it.
    return;
}

FileDialog::~FileDialog()
{
    return;
}

但是当我尝试将路径的文本字段添加到窗口小部件时,所有工作都按预期工作,直到我终止应用程序,之后(如果我在调试模式下),程序收到{{1 }}。 当我再次发表评论时,我不再有任何错误。

那么我忘记了什么,在将小部件添加为另一个小部件时需要注意什么?

1 个答案:

答案 0 :(得分:1)

当您将窗口小部件添加为另一个窗口小部件的子窗口时,根据Qt体系结构,父窗口小部件将获取其子窗口小部件的所有权,并在您终止应用程序时尝试销毁它。同时,Browser1FileDialog类的成员变量,它也会尝试在析构函数中销毁同一个对象。这是问题的来源。

作为解决方案,我建议:

  • 使用Qt对象的指针,
  • 维持父/子关系,
  • 使用布局构建GUI