【问题标题】:QT dialog close and deleteQT 对话框关闭并删除
【发布时间】:2014-07-19 02:47:16
【问题描述】:

我有一个 MainWindow 和 Type 类。

MainWindow 中的按钮使用以下代码向插槽发送信号:

dialog = new QDialog(this);

Ui_type typeui;
typeui.setupUi(dialog);

dialog->show();

然后显示对话框。当点击对话框上的按钮时,我想关闭对话框并删除它。

我不明白如何从对话框本身引用对话框。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您可以在对话框中设置Qt::WA_DeleteOnClose 属性。这将确保对话框在关闭时被删除。

    然后在单击按钮时在对话框中调用close() 方法。

    dialog = new QDialog(this);
    
    Ui_type typeui;
    typeui.setupUi(dialog);
    
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    
    dialog->show();
    

    详情请参阅文档:

    QWidget::setAttribute ( Qt::WidgetAttribute attribute, bool on = true )

    Qt::WidgetAttribute

    【讨论】:

      【解决方案2】:

      首先关闭按钮位于对话窗口右侧,然后最简单的方法是创建一个按钮,然后连接 close() 函数以响应 click() 信号。 喜欢:

      Dialog::Dialog(){
         // other code
         QPushButton *closeButton = new QPushButton(tr("Close"));
          connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
         // other code
      }
      

      Qt/examples/dialog 项目下是您问题的很好参考。一探究竟。

      【讨论】:

      • 所以我需要创建一个名为 close 的私有插槽?在其中,我将使用哪一行代码来引用对话框?一般来说,我有点困惑如何在主窗口和对话框之间进行变量等通信!
      • QDialog继承了QWidget,QWidget已经提供了close()槽。
      • 啊,我明白了,解释为什么我需要内联代码的更好方法是因为当我单击表单上的按钮关闭时,它不是关闭按钮而是操作按钮,并且表单需要在一些先做其他事情的代码之后关闭。
      • Murat 是对的,click() 和 close() 都是由 QWidget 原生定义的,你不必那样做。
      • 好的...按钮附加到一个私有插槽,该插槽在关闭对话框之前处理一些其他代码。如果我只是在按钮上调用 close(),它首先不会处理对话框打开的代码!所以按钮是执行代码然后关闭对话框。
      【解决方案3】:

      模态对话框获取输入的简单方法是QDialog::exec()。这可能会处理您需要的一切。

      【讨论】:

      • 我的 MainWindow 类中有一个 QStringList,我的对话框类中有一个 QTextEdit。当我单击一个按钮时,我正在创建一个私人插槽以将 textedit 添加到字符串列表。我的问题是如何在对话框窗口的函数中从主窗口添加到 qstringlist?然后我需要“刷新”主窗口 UI。我只需要一个解释就可以了!
      • 一种(不一定是最好的)方法是在父构造函数参数中传递主窗口指针i,并通过指针访问(公共)字符串列表。
      • 其他方式是否更复杂?你能提供任何代码示例吗?只需要朝着正确的方向推进即可获得这种理解。
      • 我只是在我的手机上,10年前用qt3做这个,你的描述不是100清楚。 Byt 在你的对话代码中你可以写一些东西parent -> theStringlist << stringToAdd.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2013-11-11
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2015-11-17
      相关资源
      最近更新 更多