Приобрести книгу можно на сайте ozon.ru и в электронном виде на Google Play:
6 thoughts on “Глава 23 – Работа с OpenGL”
Уважаемый Макс. Столкнулся с такой проблемой. Немного изменил код примера, который приведен на страницах 347-350 (листинги 23.1-23.6). В функции main вместо “oglQuad.show();” прописал “oglQuad.showFullScreen();” И чтобы была возможность закрыть окно, реализовал для класса OGLQuad метод keyPressEvent, получилось следующее:
1) в header-файле стандартное определение: “virtual void keyPressEvent(QKeyEvent*);”
2) в cpp-файле реализация:
/*virtual */void OGLQuad::keyPressEvent(QKeyEvent* pe) {
if(pe->key()==Qt::Key_Escape) this->close();
}
Всё заработало. Насколько корректен такой вариант?
Но почему-то не работал вариант с сигналом, который высылался(emit) из этого-же метода. Как я понял классу OGLQuad “не понравился” макрос Q_OBJECT. Компилятор выдавал множественные ошибки вида: “…undefined reference to `vtable for OGLQuad’ “. Не подскажите в чем проблема?
Здравствуйте, Вячеслав!
Варриант с реализацией метода обработки события keyPressEvent() вполне приемлим. Единственное “this->” можно опустить.
На счет ошибок при компиляции, макрос Q_OBJECT тут думаю не причем. Проследите чтобы имя .h файла, в котором находится макрос, был указан в секции HEADERS в .pro файла.
Макс, хотел еще спросить. Вы постоянно в реализациях виртуальных методов в начале пишите /*virtual */, это чтобы не смотря в определение можно было понять, что метод(функция) виртуальный? Правильно я понял?
Здравствуйте!
В точности переписал пример на страницах 347-350 и получил ошибки такого толка “Ссылка на нерезрешённый внешний символ_…”
Ругается на функции вроде glBegin().
Подскажите, что именно я упускаю?
Уважаемый Макс. Столкнулся с такой проблемой. Немного изменил код примера, который приведен на страницах 347-350 (листинги 23.1-23.6). В функции main вместо “oglQuad.show();” прописал “oglQuad.showFullScreen();” И чтобы была возможность закрыть окно, реализовал для класса OGLQuad метод keyPressEvent, получилось следующее:
1) в header-файле стандартное определение: “virtual void keyPressEvent(QKeyEvent*);”
2) в cpp-файле реализация:
/*virtual */void OGLQuad::keyPressEvent(QKeyEvent* pe) {
if(pe->key()==Qt::Key_Escape) this->close();
}
Всё заработало. Насколько корректен такой вариант?
Но почему-то не работал вариант с сигналом, который высылался(emit) из этого-же метода. Как я понял классу OGLQuad “не понравился” макрос Q_OBJECT. Компилятор выдавал множественные ошибки вида: “…undefined reference to `vtable for OGLQuad’ “. Не подскажите в чем проблема?
Здравствуйте, Вячеслав!
Варриант с реализацией метода обработки события keyPressEvent() вполне приемлим. Единственное “this->” можно опустить.
На счет ошибок при компиляции, макрос Q_OBJECT тут думаю не причем. Проследите чтобы имя .h файла, в котором находится макрос, был указан в секции HEADERS в .pro файла.
Макс, хотел еще спросить. Вы постоянно в реализациях виртуальных методов в начале пишите /*virtual */, это чтобы не смотря в определение можно было понять, что метод(функция) виртуальный? Правильно я понял?
Да, Вячеслав правильно!
Здравствуйте!
В точности переписал пример на страницах 347-350 и получил ошибки такого толка “Ссылка на нерезрешённый внешний символ_…”
Ругается на функции вроде glBegin().
Подскажите, что именно я упускаю?
Александр, скорее всего Вы забыли внесли в .pro файл следующие строки:
windows {
LIBS += -lopengl32
}