2016-10-05 2 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 
    } 
} 

The 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

Я бы предложил 'override', а не' Q_DECL_OVERRIDE', Qt 5.7 не строится на компиляторах, которые не поддерживают это ключевое слово. Я обычно предлагал Q_DECL_OVERRIDE до Qt 5.7, но теперь это не нужно. –

+0

@KubaOber хороший пункт. В общем, 'Q_DECL_OVERRIDE' - это безопасная ставка для более старых версий тоже :), так как он не указал версию Qt, я пошел с безопасной ставкой, но скорректировал ее, чтобы упомянуть обоим путям сейчас. – deW1

+0

Ой ... что, если я не могу включить эту библиотеку, потому что, видимо, ее не существует? – Ana

Смежные вопросы