【问题标题】:Qt keyPressEvent ErrorQt keyPressEvent 错误
【发布时间】:2017-02-14 03:44:05
【问题描述】:

我写了这段代码,但我得到了这个错误:

“'->key' 的左边必须指向类/结构/联合/通用类型”。

考虑到 GUI 是派生自 QWidget 类的类,我怎样才能正确捕捉按键的按下?

void GUI::keyPressEvent(QKeyEvent *event)
{
    if (event->key()==Qt::Key_Up) {
        //do something
    }
}

keyPressEvent 声明如下:

protected:    
    virtual void keyPressEvent(QKeyEvent *event);

【问题讨论】:

    标签: c++ qt keypress qwidget qkeyevent


    【解决方案1】:

    你必须包括

    #include <QKeyEvent>

    那么它应该按预期工作。


    除此之外,您应该使用Q_DECL_OVERRIDE 宏,例如:

    protected:    
        virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
    

    正如@KubaOber 所提到的,如果您使用默认支持>=C++11 的C++ 编译器或通过CONFIG += c++11 激活它,那么您可以使用override 关键字。

    【讨论】:

    • 我建议override 而不是Q_DECL_OVERRIDE,Qt 5.7 不建立在不支持该关键字的编译器之上。在 Qt 5.7 之前我曾经建议Q_DECL_OVERRIDE,当然,但现在没有必要了。
    • @KubaOber 好点。一般来说,Q_DECL_OVERRIDE 对于旧版本来说也是安全的选择:) 因为他没有指定 Qt 的版本,所以我选择了安全的赌注,但现在调整了它以提及两种方式。
    • 哦...如果我不能包含这个库,因为它显然不存在?
    • @Ana 你使用的是 QtCreator 还是 Visual Studio 插件/如果你使用的是 QtCreator 是哪个版本?
    • @deW1 我正在使用 Visual Studio 插件,并且我有 Qt 5.6 版本
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多