QxtGlobalShortcut在控制台应用程序中导致SIGSEGV

时间:2011-07-23 17:34:13

标签: c++ qt4 libqxt

我正在编写一个控制台应用程序,允许您使用ECMAScript移动鼠标,定义热键等。鼠标的工作原理,现在我试图添加定义热键的功能,按下时调用QtScript处理函数。

问题是,当我尝试使用QxtGlobalShortcut创建热键时,我得到了一个SIGSEGV,一切都崩溃了。

以下是代码:

int Keyboard::hot_key(QString key) {
    QxtGlobalShortcut shortcut;
    shortcut.setShortcut(QKeySequence(key));
    shortcut.setEnabled(true);
    connect(&shortcut, SIGNAL(activated()), this, SLOT(hot_key_pressed()));
    return 0;
}

这一行QxtGlobalShortcut shortcut;,如果我除了该行以外的整个函数,它仍然会抛出一个seg错误。

调试器说:

1   ZNK17QxtGlobalShortcut8shortcutEv   C:\Qxt\lib\QxtGui.dll   0   0x6f6f14a6  
2   ZN17QxtGlobalShortcutC1EP7QObject   C:\Qxt\lib\QxtGui.dll   0   0x6f6f14f7  
3   Keyboard::hot_key   keyboard.cpp    16  0x403c0c    
4   Keyboard::qt_metacall   moc_keyboard.cpp    74  0x404740    
5   QMetaObject::metacall   qmetaobject.cpp 237 0x8f5ff8

考虑到不那么容易,在我看来,Windows热键是,我真的很想使用Qxt,但到目前为止我只是碰壁了。如果有人能指出我正确的方向,或者甚至推荐一些其他能够帮助我的图书馆,或者是热门的教程那么棒。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您的shortcut对象是在堆栈上构建的。离开该函数后,它将被删除,因此即使代码没有在该函数中死亡,代码仍然会失败。

您应该使用以下命令创建该对象:

 QxtGlobalShortcut *shortcut = new QxtGlobalShortcut;

如果您不关心泄漏,请将该指针存储为您的类的成员,并将delete存储在它的析构函数中。

对于崩溃,如果您使用的是早于6.0的Qxt版本并且尚未初始化QxtApplication,则可能会发生这种情况。