2016-10-05 14 views
0

私は、コードのこの作品を書いたが、私はこのエラーを取得:QtのkeyPressEventエラー

"left of '->key' must point to class/struct/union/generic type".

はGUIがQWidgetクラスから派生したクラスであることを考えると、どのように私はきちんとキーの押下をキャッチすることができますか?

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

keyPressEventは、このように宣言されています

protected:  
    virtual void keyPressEvent(QKeyEvent *event); 

答えて

1

あなたが意図したとおり、それが動作するはず

#include <QKeyEvent>

を含める必要があります。別に


マクロQ_DECL_OVERRIDEなどを使用する必要があることから:

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

@KubaOberが述べたように、あなたは、デフォルトでは> = C++ 11のいずれかをサポートするC++コンパイラを使用している場合か、 CONFIG += c++11でそれを有効にすると、代わりにoverrideキーワードを使用できます。

+0

'Q_DECL_OVERRIDE'ではなく' override'を提案します.Qt 5.7は、そのキーワードをサポートしていないコンパイラでは構築されません。 Qt 5.7よりも前に 'Q_DECL_OVERRIDE'を提案していましたが、今は不要です。 –

+0

@KubaOber良い点。一般に 'Q_DECL_OVERRIDE'はQtのバージョンを指定していないので、古いバージョンの安全な賭けです。私は安全な賭けをしましたが、両方の方法について言及するように調整しました。 – deW1

+0

ああ...どうやらそれが存在しないので、私はこのライブラリを含めることができないのですか? – Ana