2016-10-05 63 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++編譯器支持> = C++ 11或者通過默認或通過你用CONFIG += c++11激活它,那麼你可以使用override關鍵字來代替。

+0

我建議'覆蓋'而不是'Q_DECL_OVERRIDE',Qt 5.7不建立在不支持該關鍵字的編譯器上。當然,我曾經在Qt 5.7之前建議'Q_DECL_OVERRIDE',但現在沒有必要。 –

+0

@KubaOber好點。一般來說,'Q_DECL_OVERRIDE'也是老版本的安全選擇:)因爲他沒有指定Qt的版本,所以我採用了安全的賭注,但是現在調整爲提及兩種方式。 – deW1

+0

哦......如果我不能包含這個庫,那顯然它不存在會怎麼樣? – Ana