gpt4 book ai didi

c++ - 如何在单独的线程中调用 QDialog::exec 避免任何信号(包括重绘)到主线程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:07 25 4
gpt4 key购买 nike

我想创建我自己的 ASSERT/VERIFY 消息框。所以我使用:

int _CrtSetReportHook(int reportType, char * message, int * returnValue)

钩子(Hook)本身是:

int MyReportHook(int reportType, char * message, int * returnValue)
{
...
QDialog assertDlg;
...
assertDlg.exec();
}

它有效,但如果我有一个 ASSERT on paint 事件(通常在其他胎面),我会崩溃。那么...我该如何解决这个问题?

编辑通常,我想在执行 paintEvent(QPaintEvent * event) 时调用 QDialog::exec()。因此,我需要防止调用整个 QApplication 的重绘(并确保处理任何其他信号)。

最佳答案

简单的回答是:你不能。有两种解决方案适用于任意线程:

  1. 使用 MessageBox winapi.

  2. 向 GUI 线程中的 QObject 发送信号。该信号将在 GUI 线程中接收并可以与用户交互。如果您关心返回值,可以使用同步对象等待 GUI 线程指示消息框已处理并且返回值可用。

关于c++ - 如何在单独的线程中调用 QDialog::exec 避免任何信号(包括重绘)到主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com