奇怪的Qt行为导致我的应用程序崩溃

时间:2014-05-29 19:16:21

标签: qt crash

通常当我在Qt中遇到问题时,通常是因为我不理解某些东西,但这个问题只是不合逻辑。

我有这个功能来处理热键的事件:

bool MainWidget::nativeEvent(const QByteArray& eventType, void* message, long* result)
{
    MSG* msg = reinterpret_cast<MSG*>(message);
    if (msg->message == WM_HOTKEY)
    {
        qDebug() << "It works";   // IF I REMOVE THIS LINE, THE APP CRASHES.
        togglevisibility(false);
    }
}

它运行得很好但是如果我删除qDebug()行,那么应用程序一开始运行就会崩溃。什么都没有显示出来。构造函数中的代码会运行,但它似乎一旦到达此函数就会崩溃。

在我的主要小部件的构造函数中,我有这一行来注册我的热键:

if (!RegisterHotKey(HWND(this->winId()), 1, MOD_CONTROL | MOD_SHIFT | 0x4000, 0x41)) qDebug() << ("Hotkey failed");

添加任何其他行而不是qDebug并没有什么不同。 (例如删除消息)。删除线&#39;切换可视性&#39;没有什么区别可以排除这种功能。

如果我在if语句之前移动qDebug行不会使应用程序崩溃。似乎qDebug线在某种程度上是必需的,根本没有任何意义。

如果有人能理解这一点,请告诉我。我宁愿不在我的应用程序中留下qDebug行。

1 个答案:

答案 0 :(得分:0)

我发现了如何停止应用程序崩溃并删除qDebug。 Qt nativeEvent事件必须返回一个bool。添加行return NULL将停止崩溃。

但是我无法解释为什么qDebug阻止它崩溃之前。