gpt4 book ai didi

c++ - 在调用 QWidget.setParent() 的过程后终止时发出 SIGSEGV

转载 作者:行者123 更新时间:2023-11-28 06:09:28 25 4
gpt4 key购买 nike

我尝试编写一个 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;
}

但是当我尝试将路径的文本字段添加到小部件时,一切都按预期工作,直到我终止应用程序,之后(如果我处于 Debug模式)程序收到 SIGSEGV。当我再次将其注释掉时,我不再收到任何错误。

那么我忘记了什么,在将一个小部件添加为另一个小部件时必须提醒什么?

最佳答案

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

作为我推荐的解决方案:

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

关于c++ - 在调用 QWidget.setParent() 的过程后终止时发出 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com