Подскажите как работать с QPainter, Проблемы с отрисовкой с помошью QPainter |
Здравствуйте, гость ( Вход | Регистрация )
Подскажите как работать с QPainter, Проблемы с отрисовкой с помошью QPainter |
bayah |
18.5.2011, 16:44
Сообщение
#1
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Не пойму как толком работает QPainter. Поэтому вот элементарный код который я тестил:
} В результате ничего не отображается. Почему? Сразу задам мучающие меня вопросы по этому поводу: - для чего метод begin(QPaintDevice*), если мы девайс для отрисовки указываем и так при создании? - (собственно что мне нужно от этой отрисовки) как вывести на главный виджет какую нибудь область(другой виджет - QGraphicsView, например) и рисовать только на нем мерси Сообщение отредактировал bayah - 18.5.2011, 16:45 |
|
|
Litkevich Yuriy |
19.5.2011, 6:12
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Потому-что рисование осуществляется не в произвольном месте программы, а в обработчике события рисования QWidget::paintEvent.
Что приведено в элементарном примере из описания класса QPainter: Цитата Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent();
|
|
|
bayah |
20.5.2011, 10:03
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да, спасибо, уже разобрался.
Короче придется наследовать класс, в нем переопределять QPaintEvent, потом создавать его динамически... Поначитал тут столько извращений, типа как рисовать на дочернем виджете из родительского окна: перехватывать сообщения, вызывать отрисовку потомка, потом рисовать поверх. У меня все равно почему-то не заработало, но это ладно - от такого подхода я уже отказался. Буду либо переопределять, либо рисовать на QGraphicsView с помошью QPainterPath, QGraphicsScene. А эту тему можно закрыть и даже удалить лучше, - чтобы те, кто будет искать ответы на вопросы подобные моим в этой теме не спотыкались.) |
|
|
bayah |
20.5.2011, 18:31
Сообщение
#4
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Хотя у меня че-то не работает даже примитивный код.
Тут я пытаюсь унаследовать от создать класс DrawWidget унаследовав его от QGraphicWidget переопределив в нем paintEvent и отрисовать в нем что нибудь. Вот такой код. Почему не отрисовывается? drawwidget.h
drawwidget.cpp
main.cpp
Сообщение отредактировал bayah - 20.5.2011, 18:32 |
|
|
Litkevich Yuriy |
20.5.2011, 21:10
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
bayah |
21.5.2011, 1:48
Сообщение
#6
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата а почему от QGraphicWidget, а не от QWidget? Ой - QGraphicsView, а не QGraphicsWidget коечно же - это описка.
|
|
|
Litkevich Yuriy |
21.5.2011, 7:12
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
ты что-то вообще не то делаешь.
В Qt есть два способа рисования: Артур (рисование в paintEvent виджета), и Грфическое представление (создание элементов на сцене и отображение их в представлении). |
|
|
bayah |
21.5.2011, 10:52
Сообщение
#8
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата ты что-то вообще не то делаешь. а что я не то делаю? я переоределяю paintEvent у созданного мной потомка от QGraphicsView QgraphicsView тут я использую как обычный виджет с возможностью рисовать на нем. Цитата В Qt есть два способа рисования: Артур (рисование в paintEvent виджета) ну вот я и рисую так вроде бы? |
|
|
bayah |
21.5.2011, 15:42
Сообщение
#9
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
блин, унаследовался от QWidget и тогда только нарисовалось.
Но почему нельзя чтобы рисовалось на виджете наследованном от QGraphicsView? |
|
|
Litkevich Yuriy |
21.5.2011, 16:01
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 19.4.2024, 22:57 |