crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QGraphicsView + KeyPress Event
Гость_DerKetzer_*
сообщение 6.11.2011, 22:44
Сообщение #1





Гости








    


Доброго времени суток,
Решил поделать курсач. Для этого выбрал библиотеку QT(раньше с ней дело не имел)...
Пытаюсь создать небольшую игрушку. Для этого использую QPainter + QGraphicsView + QGraphicsScene. Как рисовать я понял... Но как считывать нажатие клавиш?

Код main'a:

int main(int argc, char **argv)
{
     QApplication app(argc, argv);
     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
     QGraphicsScene scene;
     QGraphicsView view;
     for (int i = 0; i < 8; ++i) {
     Tanks *tank= new Tanks;
     scene.addItem(tank);
     }
     view.show();
     return app.exec();
}


Если вставить функцию:

void QGraphicsView::KeyPressEvent(QKeyEvent* event){
    if(event->key()==Qt::Key_W) {
         //Do Smth
    }
}


То при нажатии на 'W' ничего не происходит.

Помогите нубасу пожалуйста! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_DerKetzer_*
сообщение 7.11.2011, 13:59
Сообщение #2





Гости








    


Спасибо за скорый ответ.
Такс, создал класс(мб что то не правильно понял):
#include <QGraphicsView>
#include <QObject>

class keyPress
{
public:
    keyPress();
    bool eventFilter(QObject* obj, QEvent* e);
protected:
    void KeyReleased(QKeyEvent* e);
    void KeyPressed(QKeyEvent* e);
    QObject* pObj;
private:
    std::map<int, bool> m_keyMap;
};


реализация:

#include <QMessageBox>
#include <QtCore>
#include <QtGui>

keyPress::keyPress()
{
    if(qApp) qApp->installEventFilter (this);
}

void keyPress::KeyReleased(QKeyEvent* e)
{
    QMessageBox msgBox;
    if(e->key ()==Qt::Key_W) msgBox.setText("bla.");

}

void keyPress::KeyPressed(QKeyEvent* e)
{
    QMessageBox msgBox;
    if(e->key ()==Qt::Key_Z) msgBox.setText("The document has been modified.");
}

bool keyPress::eventFilter(QObject* pObj, QEvent* e)
{
...
}

int main(int argc, char **argv)
{
     QApplication app(argc, argv);
     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
     QGraphicsScene scene;
     QGraphicsView view(&scene);
     keyPress key;
     for (int i = 0; i < 8; ++i) {
         Tanks *tank= new Tanks;
         scene.addItem(tank);
     }
     view.show();
     return app.exec();
}


Наследником чего должен быть класс keyPress? Я так понял, что QGraphicsView... так ли это?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 9.11.2011, 8:27
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(DerKetzer @ 7.11.2011, 14:59) *
Наследником чего должен быть класс keyPress? Я так понял, что QGraphicsView... так ли это?


Достаточно унаследоваться от QObject
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_DerKetzer_*
сообщение 13.11.2011, 5:47
Сообщение #4





Гости








    


Цитата(wiz29 @ 9.11.2011, 8:27) *
Цитата(DerKetzer @ 7.11.2011, 14:59) *
Наследником чего должен быть класс keyPress? Я так понял, что QGraphicsView... так ли это?


Достаточно унаследоваться от QObject


Спасибо, разобрался)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.1.2022, 18:18