在Qt中等待按钮按下
Waiting for button press in Qt
我有一个自定义类继承自QDialog
。我用功能foo
创建这个对话框,foo
想要继续做它的事情,只有当对话框中的某个按钮被按下时。我正在考虑使用信号和插槽,但是我怎么能让foo
响应来自另一个线程的信号呢?
编辑:基本上我想知道如何使用我自己的对话框重新实现QInputDialog::getText()的功能。
您的foo()函数可以在[QWaitCondition][1]对象上调用wait(),然后您的按钮可以在同一对象上调用wakeOne()以导致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()阻塞。
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 如何让LLDB在成功时退出,在失败时等待
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- 等待整个 omp 块完成,然后再调用第二个函数
- 提升 ASIO - io_service 不要等待连接到线程
- 等待,直到按下按钮(QT)
- 等待在QML界面中单击两个按钮
- 在Qt中等待按钮按下