Qt创建对话框

3

我已经成功创建了我的第一个Qt窗口。现在我想使用Qt创建一个对话框。我刚刚完成了对话框的创建,它基本上是由QDialogButtonBox组成的,并且现在我想将其连接到窗口上。我有两个初学者的问题:

  • 如何从创建新对话框的window.cpp中检索对话框关闭的方式(是否按下ok或cancel按钮)?
  • 在哪里以及如何销毁对话框指针?

在Qt帮助文档中搜索“标准对话框示例”。这里有一个非常好的示例。 - liuyi.luo
我已经阅读了其中的一部分,但并不是全部都理解了,而且我认为我的问题的答案并不在那里。 - shkra19
3个回答

2

如果您使用 dialog->show(),那么我认为它是非模态对话框。

如果您已经创建了 QDialogButtonBox 并将其信号连接到您的对话框的 accept()reject() 槽上,如文档所示,那么您的对话框将会发出 finished(int) 信号,以及 accepted()rejected() 信号,通过这些信号您可以确定它是如何关闭的。

如果您需要更多自定义行为,则可以重新实现 closeEvent(QCloseEvent *event) 或创建自己的信号。

如果您需要删除您的对话框,可以使用 setAttribute(Qt::WA_DeleteOnClose, true);,则它将在关闭时被删除实例。


1

您可以使用一个标志、信号和槽。当放置OK标志=1时,当放置取消时,标志=-1;然后使用信号。在window.h中编写代码,如何使用1个简单的槽处理这些标志。

为了销毁指针,您可以在对话框中使用信号和槽,并告诉用户何时按下OK、Cancel或退出(右上角(红色十字)),进入调用对话框的析构函数的槽。

并且最好将对话框的父级设置为窗口。


1
  • 第一个问题:

    当你想要显示对话框时,只需构造它,使用myDialog *d = new myDialog(this)this指针将确保你不必删除你创建的指针,因为Qt会处理这个问题,如果你指定了对话框的父对象)。并且如果需要模态对话框,请使用d->exec()或者使用d->show()使其成为非模态对话框;

  • 第二个问题:

    一旦你指定了对话框的父对象,你所需要做的就是使用它,并让内存管理自己处理,Qt会为你完成这个任务。 此外,你可以使用d->setAttribute(Qt::WA_DeleteOnClose,true)使其在关闭时自动销毁。

记得QDialogButtonBox链接到你的对话框操作中。


你的第一个回答和问题没有关联。问题是如何确定对话框是否已关闭(以及如何确定)。在第二个答案中,您说如果设置了父级,则可以单独离开对话框。主窗口很可能是对话框的父部件,因此在应用程序退出之前,内存不会被释放。另外,4小时后重复我的提示有什么意义? - mip
抱歉,朋友。我一进办公室就回答了这个问题,打开电脑开始工作,看来我们不在同一个时区。你认为我在重复你的提示。当我看到这个问题时,我立即给出了答案,很抱歉没有注意到“你的提示”。我只是想帮忙。我的英语不够好,希望我的回答能有所帮助。 :) - helsinki
我原以为你是小孩,对于我教学风格的道歉,先生。现在我明白由于时区问题,你会晚看四个小时。幸运的是,我已经调整了我的桌面时钟来匹配你的时区,所以你有机会立即看到这条评论。 - mip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接