Название: QEvent для чайников:) Отправлено: Olexandr от Февраль 20, 2013, 21:00 Есть программка которая выводит пустое OpenGL окно.
Причем цвет окна задается в glClearColor(0.5f,0.2f,0.5f,1.0f); Меня очень интересует как считывать нажатые клавиши с клавиатуры. А конкретно вывод qDebug() << "hello world!"; при нажатии клавиши "0" Я написал приблизительно код, а вот куда вставлять и как подключать... не разобрался еще. Помогите пожалуйста, кому не лень. Код который нужно как то запустить: Цитировать Код: if (event->type() == QEvent::KeyPress) { // если событие - нажатие клавиши. и собственно программа которая создает пустое OpenGL окно. proekt.pro Код: QT += core gui opengl main.cpp Код: #include "QApplication" oknoGL.h Код: #ifndef OKNOGL_H oknoGL.cpp Код: #include "oknoGL.h" Название: Re: QEvent для чайников:) Отправлено: Alex Custov от Февраль 20, 2013, 21:42 https://qt-project.org/doc/qt-4.8/qwidget.html#keyPressEvent
Сравнивай с Qt::Key_0, а не с числом. И даже сравнение с числом неправильное - нужно сравнивать с 0x30. Название: Re: QEvent для чайников:) Отправлено: Olexandr от Февраль 20, 2013, 22:35 https://qt-project.org/doc/qt-4.8/qwidget.html#keyPressEvent Спасибо поправил.Сравнивай с Qt::Key_0, а не с числом. И даже сравнение с числом неправильное - нужно сравнивать с 0x30. Вот if (event->type() == QEvent::KeyPress) { if (event->key() == Qt::Key_0) { qDebug() << "hello world!"; } else { qDebug() <<"key =! Key_0"; } } теперь можно вставлять в main(){} ?? А как поступать дальше? Пере означить класс keyPressEvent? Код: void QWidget::keyPressEvent ( QKeyEvent * event ) Название: Re: QEvent для чайников:) Отправлено: k0p4 от Февраль 21, 2013, 18:56 Цитировать Пере означить класс keyPressEvent? Сперва выучите С++, потом Qt.1. Не "пере означить" а "переопределить". 2. keyPressEvent - не класс, а метод. 3. Переопределить метод в классе oknoGL. 4. Личное пожелание. Не называйте переменные транслитом. Название: Re: QEvent для чайников:) Отправлено: Olexandr от Февраль 22, 2013, 17:45 Цитировать Пере означить класс keyPressEvent? Сперва выучите С++, потом Qt.1. Не "пере означить" а "переопределить". 2. keyPressEvent - не класс, а метод. 3. Переопределить метод в классе oknoGL. 4. Личное пожелание. Не называйте переменные транслитом. А что нельзя учись с++ и заодно паковаться с библиотеками Qt? 1-4, спасибо учту. немного допилил код:) (основу кода взято из - Шеле 4.5 с.266 ) Код: void myMetod::keyPressEvent(QKeyEvent* pe) при этом myMetod должен быть объектом-потомком Qwidget, например: наследник класса, допустим "oknoGL" который, как я понимаю с нижнего кода, наследует вот так: Qwidget->QGLWidget->oknoGL тесть, унаследовав такой класс обработка нажатий будет работать? Код: class oknoGL : public QGLWidget Название: Re: QEvent для чайников:) Отправлено: Alex Custov от Февраль 22, 2013, 17:53 А что нельзя учись с++ и заодно паковаться с библиотеками Qt? категорически не советую, ибо уровень непонимания будет высокий. Виртуальные методы - один из столпов C++, и он уже вызывает непонимание у тебя. Название: Re: QEvent для чайников:) Отправлено: Olexandr от Февраль 22, 2013, 18:18 категорически не советую, ибо уровень непонимания будет высокий. Виртуальные методы - один из столпов C++, и он уже вызывает непонимание у тебя. Я так просто не сдаюсь, если не будет прогресса в понимании то тогда уже возьмусь отдельно за с++В университете учил С++ но ни разу не слышал про "Виртуальные методы", буду поправлять)) Название: Re: QEvent для чайников:) Отправлено: Авварон от Февраль 22, 2013, 23:02 А где так учат, если не секрет?:)
Название: Re: QEvent для чайников:) Отправлено: k0p4 от Февраль 25, 2013, 16:41 Цитировать А что нельзя учись с++ и заодно паковаться с библиотеками Qt? Я начинал как Вы. Только пришлось выучить С++ и только потом взятся за Qt. Пожалейте своё время.Обьясните, пожалуйста, что должен делать метод Цитировать void myMetod::keyPressEvent(QKeyEvent* pe) Этот код даже не сбилдится.{ switch(pe->key()) { case Qt::Key_0: // если нажатая клавиша = "0" qDebug() << "hello world!"; // высвисти "hello world!" } else { qDebug() <<"key =! Qt::Key_0"; } default: QWidget::keyPressEvent(pe); // Передать событие дальше } |