![]() |
|
![]() ![]() ![]() |
|
gordmiand |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Каким образом (какой исп-ся метод?) можно вывести определенный текст в заданное место OpenGL-виджета?
В классе QGLWidget есть метод renderText: В хидере класса объявляю данный метод:
В cpp-шнике (в методе paintGL()):
пишет, что undefined reference to `класс::renderText(int, int, QString const&, QFont const&, int)… так как же правильно использовать данный метод вывода текста в виджет opengl-я? |
||||
|
|||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
На кой ляд Вы чего-то там объявляете? Если Вы наследуетесь от QGLWidget то все методы предка Вам доступны в наследнике. А Вы метод перекрываете новым объявлением, но реализации не предоставляете.
Сначала надо язык выучить, а потом программы писать. ![]() -------------------- |
|||
|
||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
согласен - с объявлением я погорячился....теперь другая проблема:
если код
запускаю непосредственно из paintGL, то текст выводится (все верно), а если переношу сей код в функцию (fig_mod1) одного из классов (Mode1 - приходится делать его наследником от QGLWidget), запускаемую из того же paintGL, то вообще ничего не выводится (даже рисунок другого класса Mode2), хотя и нет ошибок – см. прилагаемую программу… ну что тут не так? А вообще вывод надписи и построения графических элементов надо запихнуть в отдельный класс Figures и вызывать эти методы в функциях классов Mode1 и Mode2… Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
kemiisto |
|
||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
Боже!
Фуф... Я даже не знаю, с чего и начать. gordmiand, Вы не с Delphi, случайно, переходите? Сдаётся мне, что именно так. Что Вам известно про ООП, кроме того как расшифровывается эта аббревиатура? Правильный ответ - ничего. Я молчу, про то, что Вы не знаете С++... Как обычно это делается. Субклассим QGLWidget:
В методе paintGL() пишем код отрисовки.
Это можно сделать относительно просто. Посмотрите, например, Hello GL Example. Класс QtLogo. Я сейчас как раз одну приладу пишу и тоже такой подход использую. Исходники можно увидеть тут. НО! Если Вы хотите выводить надписи с помощью renderText(), Вы должны вызвать этот метод для объекта класса QGLViewer, в котором и хотите увидеть надпись. Можно это сделать прямо в методе paintGL() этого объекта, можно куда-то передать указатель/ссылку на этот объект и там где-то через указатель/ссылку вызвать этот метод. А Вы городите непонятно что... Это сообщение отредактировал(а) kemiisto - 10.3.2010, 17:48 -------------------- |
||||
|
|||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
"Субклассим QGLWidget" - и что? у меня тоже есть класс GL_wnd-потомок QGLWidget, в котором я переопределяю метод paintGL()...Вы толком скажите - почему не выводится не только текст, но и фигуры, описанные в классах Mode1 и Mode2?
По поводу renderText - подскажите тогда самый простой способ вывода текста на gl-виджет типа QGLWidget... и указанная ссылка на Ваши исходники - какая-то непонятная... где и что именно там выбирать? |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
Да. Есть. ![]() Но! Mode1 тоже на кой-то ляд унаследован от QGLWidget. И при вызове Mode1::fig_mod1() внутри GL_wnd::paintGL() происходит что-то жуткое. ![]() Ужасный код. Просто ![]() ![]() -------------------- |
|||
|
||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
у меня вообще чего-то мой же проект Proj9_03.rar не запускается:
"mingw32-make: No rule to make target `../Qt/2010.01/qt/mkspecs/win32-g++/qmake.conf', needed by `makefile'. Stop." наверное файл какой из проекта нечаянно удалил...да это не суть... главное: 1. А как же мне класс Mode1 не наследовать от QGLWidget, если в методе fig_mod1() используются opengl-функции? 2. почему при вызове Mode1::fig_mod1() внутри GL_wnd::paintGL() должно происходить что-то жуткое, а не вывод надписи HELLO и красного квадрата? 3. подскажите пож-та лучшую организацию (код) взаимодействия таких классов с учетом того, что: класс GL_wnd является "базовым" потомком gl-виджета QGLWidget, в методе paintGL которого вызываются различные методы классов Mode1 и Mode2, фигуры в которых строятся методами из класса Figures... 4. фреймы используются в качестве виджетов-контейнеров, в которые грузятся различные формы (Form2 и Form3)... Это сообщение отредактировал(а) gordmiand - 11.3.2010, 00:07 |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
gordmiand, скажите, что хотите получить в итоге. Как должно выглядеть и работать приложение?
-------------------- |
|||
|
||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Приложение следующее (в принципе то же самое что я написал чуть выше):
- на главную MainWindow-форму (в ее пресловутые фреймы) грузятся различные формы Form2 и Form3. - есть класс GL_wnd - он является "базовым" (и единственным?) потомком gl-виджета QGLWidget. - по кнопке Режим1 (с формы Form3) в методе paintGL класса GL_wnd должны выводиться (вызываться) только OpenGL-фигуры, описанные в классе Mode1 (см. мой метод fig_mod1()), по клику кнопки Режим2 - фигуры, описанные в классе Mode2 (см. мой метод fig_mod2()), а по кнопке Режим3 - выводится только Label с формы Form2. Этот мой gl-виджет (указатель на экземпляр класса GL_wnd) создается и выводится (show()) в классе Form2 - см. методы show_Label и show_GLscena... В свою очередь фигуры в методах классов Mode1 и Mode2 строятся с использованием методов из класса Figures (см. мой закомментированный указатель на экземпляр fig1 класса Figures в fig_mod1())... |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
gordmiand, Вам дали в Университете задание? Так? Вот его мне и перескажите!
Не надо мне набирать про фреймы и т.д. и т.п. На кой они нужны. Без них справимся. Тут не ваш(а) одногруппник(ца)? ![]() -------------------- |
|||
|
||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
ну да, в инсте...а я Вам задание в принципе и описал в предыдущем сообщении...
а про "одногруппницу" не уверен... |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
gordmiand, если надо использовать фреймы, то я умываю руки. Я с ними не работал и не собираюсь...
-------------------- |
|||
|
||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
да совершенно не обязательно их использовать...просто я через них делал...
главное соблюсти указанную выше иерархию классов+ разобраться с выводом текста... |
|||
|
||||
kemiisto |
|
||||||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
gordmiand, завтра с утра занят буду.
Пока разберись с "каркасом" приложения. Во-первых, не будем использовать *.ui. Это overhead для учебных примеров. Во-вторых, у нас "хитрый"
Обрати внимание на private секцию
Переменную state мы используем в методе GLWidget::paintGL()
В зависимости от текущего состояния мы будем отрисовывать разные сценки. Пока тут только "заглушки" в виде renderText(). Смена состояний осуществляется через сигналы-слоты. Смотри конструктор класса Window:
Прежде чем мы пойдём дальше, скажи, ты понимаешь уже написанный код? Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() -------------------- |
||||||||
|
|||||||||
gordmiand |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
спасибо за уже оказанную помощь...cегодня днем все осознаю - тогда и отпишу....
но как же без ui-форм? что значит " Это overhead для учебных примеров"? тут специально и утилита для их создания есть (qt designer) - по-моему очень удобно - накидал на форму виджетов, задав тем самым добрую половину их свойств (местоположение, надпись на виджете и т.п.), а программного кода и так хватит писать.... и, хоть это и заглушки пока, напоминаю - выводить текст (renderText) напрямую в paintGL не надо (метод вывода текста - определяется в классе Figures, исп-ся в Mode1 и Mode2)... но так в принципе все понятно (только уточните про неиспользование ui-форм)... можно двигаться помаленьку дальше....жду Вашего ответа...спасибо! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |