2

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

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

钩子本身是:

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

它有效,但如果我在油漆事件中有一个断言(通常在其他胎面中),我会崩溃。所以......我该如何解决这个问题?

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

4

1 回答 1

2

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

  1. 使用MessageBox winapi。

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

于 2013-08-26T16:35:17.150 回答