![]() |
|
|
![]()
|
|
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Программа Proj12_03.rar:
Сделал класс Mode1 наследником от Figures, который в свою очередь является потомком от QGLWidget. В paintGL-методе вызываю метод fig_mod1() класса Mode1 по построению фигуры и вывода надписи (эти 2 метода (Figura1 и Nadpis) описываются в классе Figures) Почему тогда фигура выводится на экран, а надпись – нет (ни если ее пытаться вызывать принудительно в методе fig_mod1(), ни если через метод Nadpis)? Чем Nadpis() хуже Figura1() и как их корректно вывести на экран, вызвав из одного метода (fig_mod1) ? И что за магический макрос Q_OBJECT в описании класса-потомка от QGLWidget – если я его указываю в классе Figures, то возникает ошибка “undefined reference to `vtable for Figures” и перелетает на конструктор сего класса (что это за ошибка, как ее исправить и когда надо указывать Q_OBJECT???) Присоединённый файл ( Кол-во скачиваний: 4 )
Proj12_03.rar 19,28 Kb |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
Ответ на второй вопрос: документацию (в частности, первые уроки Tutorial'а) читал? Там чётко рассказывается, что он есть и зачем он нужен. |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
да это не главное - главное, чтобы программа Proj12_03.rar заработала верно - то есть чтобы выводились на экран и фигура, и надпись, определенные в соответсвующих методах стороннего класса...посмотрите пож-та данную программу....
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
Тема "уплыла" отсюда. Юзернейм абсолютный ноль в ООП, как впрочем и в программировании. Проект программистам с расшатанной психикой открывать не советую.
При этом советам не внимает. Просто игнорирует любые попытки помочь. Пихает и пихает свой ###код. -------------------- |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
kemiisto: ну почему-же я "игнорирую любые попытки мне помочь"? Вы же так и остановились на полдороги в предыдущей теме по данному вопросу и не ответили - почему описанные в одном методе фигура выводится на gl-виджет, а текст (методом renderText)- нет (проект см. выше)? А за подсказку более правильной иерархии классов в соответствии с заданием, указанным в предыдущей теме, буду только благодарен...
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
Вот ответ:
Если ты не понимаешь - тебе в "Центр помощи". Хотя всё равно бесполезно. Ты задачу-то толком сформулировать не можешь. Как её в таком случае решать? -------------------- |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Задача у меня сейчас одна - в классе Figures сделать метод, наиболее простым способом реализующий вывод заданного текста (можно еще и шрифт с размером задавать) в заданное место gl-виджета...Если самое простое для вывода надписей - это использование метода renderText, то подскажиет пож-та программную реализацию сего действия (можно прямо в проекте)...я ж токо учусь....
|
|||
|
||||
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Как бы там ни было. По умолчанию в Qt 4.6+ используется дижок OpenGL2, если Qt его находит в ОС. QGLWidget::renderText() работает только с движком OpenGL и только в обвязке painter.beginNativePainting();/painter.endNativePainting();. Из всего этого следует, что нужно включить старый движок OpenGL:
И сделать обвязку.
У меня это привело к тому, что черный квадрат пропадает и фигура уменьшается в размерах, а вместо текста я вижу какие-то точки. Толи где-то настройки не подкрутил, толи еще что. Но тролли рекомендуют использовать QPainter::drawText() и OpenGL2:
И этот код работает нормально. |
||||||
|
|||||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
SABROG: во-первых, я не знаю - работает ли renderText() только с движком OpenGL, а не с OpenGL2, но если вставить
непосредственно в сам paintGL (а не через метод пытаться вывести сию надпись ), то текст замечательно выводится и в QT 4.6 без всяких обвязок и т.п.... во -вторых приведенный Вами последний код не работает нормально: черный квадрат пропадает и фигура уменьшается в размерах... |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Ты создаешь 2 виджета QGLWidget, один gl_wnd.cpp, другой mode1.cpp. И пытаешься рисовать методами одного QGLWidget'a на другом QGLWidget'e.
Это сообщение отредактировал(а) SABROG - 13.3.2010, 01:27 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
SABROG: все равно не вариант:
эффект тот же - даже при попытке вывести только одну надпись таким способом...подскажите лучше как сделать: "Если Вы хотите выводить надписи с помощью renderText(), Вы должны вызвать этот метод для объекта класса QGLViewer, в котором и хотите увидеть надпись. Можно это сделать прямо в методе paintGL() этого объекта, можно куда-то передать указатель/ссылку на этот объект и там где-то через указатель/ссылку вызвать этот метод" |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Переопределяй paintGL() у каждого экземпляра класса: mode1, mode2. У тебя аж 3 QGLWidget'a, а рисовать пытаешься только на одном, причем методами других виджетов.
Это сообщение отредактировал(а) SABROG - 13.3.2010, 01:31 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
и как же мне тогда визуализировать сразу несколько QGLWidget-виджетов (т.е. вызывать их PaintGL)? да и зачем? одного мало? я так и задумывал - только на виджете GL_wnd я рисую фигуры, которые строятся в других классах (Mode1 и Mode2), которые в свою очередь являются наследниками от их общего класса Figures:QGLWidget (чтобы иметь возможность использовать в его методах функции OpenGL)
Это сообщение отредактировал(а) gordmiand - 13.3.2010, 01:42 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
kemiisto: и где Вы вообще нашли такой класс, как QGLViewer? ну подскажите как программно с помощью него использовать renderText в моем paintGL-е?
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Одно дело наследоваться и совсем другое пытаться работать с экземпляром базового класса думая при этом, что пытаешься вызвать методы базового класса в контексте данных дочернего класса.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |