【发布时间】:2014-05-29 19:16:20
【问题描述】:
通常当我在 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 并没有什么不同。 (例如删除味精)。删除 'togglevisility' 行并没有什么不同,排除了该功能。
如果我在 if 语句之前移动 qDebug 行,不会使应用程序崩溃。似乎需要 qDebug 行,这根本没有任何意义。
如果有人能理解这一点,请告诉我。我宁愿不在我的应用程序中留下 qDebug 行。
【问题讨论】:
-
如果在函数末尾添加
return false;会怎样? -
添加 return false、return true 或 return null 可以有效地阻止应用程序崩溃。正如下面另一条评论所指出的,应避免返回 NULL。