[英]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.