![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_Тёма_* |
![]()
Сообщение
#1
|
Гости ![]() |
Как вообще рисовать в Qt?
|
|
|
![]() |
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Для того, чтобы рисовать, тебе понадобится переопределить void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected]
Есть статья в которой описывается как рисовать и как избавиться от мерцания при рисовании: Быстро и без мерцаний Думаю, там достаточно хорошо все описано. |
|
|
Don |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Плиз, выложите кто-нить ПОЛНЫЙ небольшой пример, где на форме будет что-нить рисоваться (линия, круг, квадрат, что угодно). А то я трох разобрался с помощью чего что рисуется, а вот как всё это вывести не догоняю.
|
|
|
AD |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Плиз, выложите кто-нить ПОЛНЫЙ небольшой пример, где на форме будет что-нить рисоваться (линия, круг, квадрат, что угодно). А то я трох разобрался с помощью чего что рисуется, а вот как всё это вывести не догоняю. Вот пример из книжки Бланшета и Саммерфилда. В примере происходит отрисовка графиков. Используется двойная буферизация, что на данный момент уже необязательно делать! plotter.h
plotter.cpp
main.h
plotter.pro
Причина редактирования: теперь можно включать подсветку [code=cpp]
|
|
|
Andrew Selivanov |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Плиз, выложите кто-нить ПОЛНЫЙ небольшой пример, где на форме будет что-нить рисоваться (линия, круг, квадрат, что угодно). А то я трох разобрался с помощью чего что рисуется, а вот как всё это вывести не догоняю. Вот пример из книжки Бланшета и Саммерфилда. В примере происходит отрисовка графиков. Используется двойная буферизация, что на данный момент уже необязательно делать! <... skipped ...> <Andrew stepped in> Я тут немного вмешаюсь, кажется у нас теперь работает syntax highlight для тега code, я сегодня пробовал ![]() иии to Admin -> блин видимо назревает необходимость Wiki... <Andrew stepped out> |
|
|
Don |
![]()
Сообщение
#6
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да уж, маленький примерчик.
![]() Какие именно функции отвечают за отображение нарисованных элементов? Как именно переопределяется paintEvent? И может кто чиркануть простой пример, где на форме просто рисуется линия, на простеньком примере проще разобраться, а потом уже рисовать всякие там графики. P.S. Наверное это и глупые вопросы, но помогите плиз, очень надо. Я в Qt недавно. |
|
|
ViGOur |
![]()
Сообщение
#7
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Маленький пример: каким способом проще рисовать поверх рисунка, о рисовании в очередной раз.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Из книжки Макса Шлее:
|
|
|
AD |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
- рисование линииразмером (100, 200)! - рисование прямоугольника - а вот и переопределение функции paintEvent, которая является виртуальной.Не понял, чем пример-то плох? ![]() |
|
|
Don |
![]()
Сообщение
#10
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо! Теперь понял.
У меня ещё один вопрос: Как нарисованные элементы прицепить к созданному виджету? Т.е. я создаю окно (QWidget wndow; .... window.show()), которому задаю нужные свойства и размещаю на нём кнопки, метки и т.д. А как к нему добавить рисунок? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
ну размести рисунок на одном виджете, и воткни его в тот на котором кнопки.
Вот Layout (компоновщик) может сам как надо отрегулировать:
|
|
|
Don |
![]()
Сообщение
#12
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Понял спасибо!
А почеиу текст нужно выводить именно через tr()? Почему нельзя просто QPushButton btn("Text");? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Я пишу в кодировке UTF-8, но строковые переменные использую в виндовозовской кодировке, иниче возникают проблемы с БД, которые я еще не победил, чтобы Qt'я могло использовать разные кодировки в разных местах, я делаю так:
тогда константы строковые помещаю в tr(), она в UTF-8, остальное Windows-1251 Если текст программы в виндовозовской кодировке, то вторую строку можешь не писать, и tr() не использовать, но лучше использовать, чтобы небыло проблем в будущем, в частности с горячими кнопками при разных раскладках клавиатуры. |
|
|
Don |
![]()
Сообщение
#14
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Как нарисовать дугу? Пытался через drawArc(), не получается - выводится точка.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а как ты это делал? приведи код
|
|
|
Don |
![]()
Сообщение
#16
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а как ты это делал? приведи код Ну вот вся прога:
Причина редактирования: используй кнопку "Код" ([code=cpp])
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Смотри для начала рабочий пример в каталоге %QTDIR%\examples\painting\basicdrawing, там есть дуги, а тут его описание Basic Drawing Example
руководство по функции: Цитата void QPainter::drawArc ( const QRectF & rectangle, int startAngle, int spanAngle ) Draws the arc defined by the given rectangle, startAngle and spanAngle. The startAngle and spanAngle must be specified in 1/16th of a degree, i.e. a full circle equals 5760 (16 * 360). Positive values for the angles mean counter-clockwise while negative values mean the clockwise direction. Zero degrees is at the 3 o'clock position. Пример, от туда
сравни цифры startAngle и spanAngle, со своими остальное должно работать, Модификация примера Макса Шлее:
|
|
|
Don |
![]()
Сообщение
#18
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Смотри для начала рабочий пример в каталоге %QTDIR%\examples\painting\basicdrawing, там есть дуги, а тут его описание Basic Drawing Example Вот тот код который рисует дугу из примера: QRect rect(10, 20, 80, 60) // я так понял задаётся прямоугольник в который вписывается эллипс int startAngle = 30 * 16; int arcLength = 120 * 16; painter.drawArc(rect, startAngle, arcLength); Ввёл в свою прогу, нарисовалась такая же дуга. Но как работать с этими углами? Шаманю со множителями, получаются куски эллипса, причём каждый раз кординально разные. Мне нужно нарисовать просто улыбочку. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
смотри мой предыдущий пост.
startAngle и spanAngle должны быть определены в ед. 1/16-ой градуса, т.е. полная окружность равна 5760 (16 * 360). Положительное значение углов означает направление против часовой стрелки, а отрицательное - по часовой. Нуль градусов находится в позиции 3 часа. |
|
|
Don |
![]()
Сообщение
#20
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Смотрите, все что рисуется на форме должно находится в функции paintEvent(). Допустим рисуются какие-то объекты по предворительным рсчётам, которые проводятся в другой функции. И если вызвать в этой фукции функцию repaint(), то происходит перерисовка с учётом расчётов. Получется функция repaint() вызывает функцию paintEvent(). Так?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#21
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
выходит так
|
|
|
guest13 |
![]()
Сообщение
#22
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
вопрос такой....
имеется такой код Раскрывающийся текст
нормально компилится запускается, но при закрытии выдает следующую ошибку что можете сказать по этому поводу? |
|
|
kwisp |
![]()
Сообщение
#23
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
найди 10 отличий ![]() все работает. почитай если интересно про иерахию классов и осовобождение памяти в Qt. |
|
|
TiiL |
![]()
Сообщение
#24
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 124 Регистрация: 8.6.2011 Пользователь №: 2727 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте, обьясните мне не догоняющему, где в приложении описанном в этой теме на первой странице задают
и возможно ли сделать оси координат ЛОгарифмическими? ЗЫ: было бы хорошо еслиб ткнули носом хотябы в функции которые надо изменить под лагорифмические оси... СПасибо
Причина редактирования: не красиво было
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.5.2025, 17:11 |