我尝试编写一个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 }}。 当我再次发表评论时,我不再有任何错误。
那么我忘记了什么,在将小部件添加为另一个小部件时需要注意什么?
答案 0 :(得分:1)
当您将窗口小部件添加为另一个窗口小部件的子窗口时,根据Qt体系结构,父窗口小部件将获取其子窗口小部件的所有权,并在您终止应用程序时尝试销毁它。同时,Browser1
是FileDialog
类的成员变量,它也会尝试在析构函数中销毁同一个对象。这是问题的来源。
作为解决方案,我建议: