C++ 如何在QCore应用程序中处理键盘事件?

C++ 如何在QCore应用程序中处理键盘事件?,c++,qt,events,C++,Qt,Events,我想在基于QCoreApplication类的命令行应用程序中处理键盘事件。 下面,我尝试重新实现QCoreApplication::event(),但我的代码不起作用: #include <QCoreApplication> #include <QtGui/QKeyEvent> class CoreApp : public QCoreApplication { Q_OBJECT public: explicit CoreApp(int & argc,

我想在基于QCoreApplication类的命令行应用程序中处理键盘事件。 下面,我尝试重新实现QCoreApplication::event(),但我的代码不起作用:

#include <QCoreApplication>
#include <QtGui/QKeyEvent>

class CoreApp : public QCoreApplication
{
Q_OBJECT
public:
    explicit CoreApp(int & argc, char ** argv);
    bool event(QEvent *event);
};

CoreApp::CoreApp(int & argc, char ** argv) :
    QCoreApplication(argc,argv)
{
}

bool CoreApp::event(QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
        if (ke->key() == Qt::Key_Q) {
            qDebug("Quit?");
            //qApp->quit();
            return true;
        }
    }
    return QCoreApplication::event(event);
}

int main(int argc, char *argv[])
{
    CoreApp a(argc, argv);
    return a.exec();
}
#包括
#包括
CoreApp类:公共QCoreApplication
{
Q_对象
公众:
显式CoreApp(int&argc,char**argv);
bool事件(QEvent*事件);
};
CoreApp::CoreApp(int&argc,char**argv):
QCoreApplication(argc、argv)
{
}
bool CoreApp::事件(QEvent*事件)
{
如果(事件->类型()==QEvent::按键){
QKeyEvent*ke=静态施法(事件);
如果(ke->key()==Qt::key_Q){
qDebug(“退出?”);
//qApp->quit();
返回true;
}
}
返回QCoreApplication::event(事件);
}
int main(int argc,char*argv[])
{
CoreApp a(argc,argv);
返回a.exec();
}
我查过了,没有找到解决办法。
如何正确处理这些事件?

不幸的是,Qt无法从控制台获取键盘和鼠标事件@阿诺德:嗯,是的,也不是。你能应付的。您需要将stdin作为套接字打开并收听它。给出了一个如何执行此操作的示例。@Robin我希望在终端中键入的每个指定键/字符都发出信号或触发事件。在我看来,在您的示例中,只有stdin中的行发出信号。不幸的是,Qt无法从控制台获取键盘和鼠标事件@阿诺德:嗯,是的,也不是。你能应付的。您需要将stdin作为套接字打开并收听它。给出了一个如何执行此操作的示例。@Robin我希望在终端中键入的每个指定键/字符都发出信号或触发事件。在我看来,在你们的例子中,只有标准输入法中的行才会发出信号。