繁体   English   中英

等待在Qt中按下按钮

[英]Waiting for button press in Qt

我有一个继承自QDialog的自定义类。 我正在使用函数foo创建此对话框,并且foo仅在按下对话框中的某个按钮时才想继续执行其操作。 我当时在考虑使用信号和插槽,但是如何让foo响应另一个线程的信号呢?

编辑:基本上我想知道如何使用我自己的对话框重新实现QInputDialog :: getText()的功能。

您的foo()函数可以在[QWaitCondition] [1]对象上调用wait(),然后您的按钮可以在同一对象上调用awanete()以使wait()返回。

就是说,使用多线程重新实现QInputDialog :: getText()确实没有必要。 您应该能够在单个线程内重新实现该功能,而不会出现任何问题,并且这样做将更加简单和可靠。

(注意:假设您希望getText()的版本被阻塞并且直到按下按钮后才返回,则需要调用QDialog :: exec()。不过,我不建议您使用这种编程风格,因为容易出错...例如,如果用户在QInputDialog仍处于打开状态时关闭QInputDialog的父窗口会发生什么呢?这将删除QInputDialog对象,该对象的getText()方法仍被程序阻止在其中,可能会导致崩溃,因为QInputDialog的现在,“ this”指针是一个悬空的指针。使所有内容都基于事件(例如,仅信号和插槽),而不是尝试在您自己的代码中阻塞或递归Qt的事件循环,将更加干净和安全。

http://doc.qt.io/qt-4.8/qdialog.html#modal-dialogs

模态对话框将阻止用户与其他窗口进行交互,这听起来像您需要的。 另外,我认为您想调用exec()而不是show()。 Show()立即将执行返回给调用者,在这里exec()会阻塞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM