Нарисовать фигуру в label по нажатию кнопки |
Здравствуйте, гость ( Вход | Регистрация )
Нарисовать фигуру в label по нажатию кнопки |
zuze |
8.11.2012, 19:09
Сообщение
#1
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Мне надо нарисовать фигуру в label по нажатию кнопки. В данном примере пытаюсь нарисовать эллипс.
Я делал так: ldialog.h
ldialog.cpp
main.cpp
Но после нажатию на кнопку эллипс не рисуется. Что я сделал не так? |
|
|
RazrFalcon |
8.11.2012, 22:47
Сообщение
#2
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Нужно наследоваться от QLabel и предопределить функцию paintEvent(), и уже в ней рисовать.
Пример. Сообщение отредактировал RazrFalcon - 8.11.2012, 22:48 |
|
|
zuze |
9.11.2012, 10:05
Сообщение
#3
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
RazrFalcon, большое спасибо, но чего-то не отображется всё равно, пока хочу сделать без нажатия на кннопку. То есть что бы при запуске программы, эллипс рисовался на label.
Сделал так: ldialog.h
ldialog.cpp
l.h
l.cpp
main.cpp
Что же опять не так? |
|
|
zuze |
9.11.2012, 17:35
Сообщение
#4
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как я понял я не вызвал paintEvent(). Я пытался его вызвать в конструкторе находящегося в файле ldialog.cpp. Но ни чего почему-то не вывелось?
Пробовал сделать так:
Также пробовал:
|
|
|
zuze |
9.11.2012, 19:31
Сообщение
#5
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Тот же самый код я попробовал написать в конструкторе находящегося в файле l.cpp. Но ни чего почему-то не вывелось. А если в конструкторе в файле main.cpp добавить
То рядом с открывшейся программой откроется ещё одна программа где будет только label и там эллипс отображается. Но это не то что мне нужно, значит, где-то я ещё ошибся? |
|
|
RazrFalcon |
9.11.2012, 20:50
Сообщение
#6
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
А где в первом варианте вы предопределяете QLabel в интерефейсе?
На форму вы новый QLabel добавили?Он должен быть отнаследован от созданного вами класса. Так как код рисования верный. Просто сам виджет вы не используете. |
|
|
zuze |
10.11.2012, 7:07
Сообщение
#7
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
А где в первом варианте вы предопределяете QLabel в интерефейсе? К сожалению я не догадался это сделать. На форму вы новый QLabel добавили? Нет, не добавлял, у меня на форме один QLabel. Как я понял надо сделать QLabel от класса l? Сейчас надо подумать как это сделать. |
|
|
Litkevich Yuriy |
10.11.2012, 8:48
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
zuze, не стал читать всю тему.
У тебя по нажатии кнопки вызывается: ui->label->update(); И зачем? Где вызов процедуры рисования? Таки прочитал Как я понял надо сделать QLabel от класса l? Сейчас надо подумать как это сделать. В Дизайнере щёлкнуть по твой метке (QLabel), правой кнопкой мыши -> "Унаследованные виджеты" (Promote to) и ввести информацию о твоём наследнике.
|
|
|
zuze |
10.11.2012, 9:04
Сообщение
#9
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, я пока решил хотя бы нарисовать эллипс, без нажатия, то есть сразу как запускается программа.
В конструкторе находящегося в файле ldialog.cpp добавил Ваш код вызова.
Но почему-то эллипс не нарисовался? В Дизайнере щёлкнуть по твой метке (QLabel), правой кнопкой мыши -> "Унаследованные виджеты" (Promote to) и ввести информацию о твоём наследнике. Я попытался так сделать, но в окне это-го пункта не оказалось. Привожу скриншот окна. Скриншот окна: |
|
|
Litkevich Yuriy |
10.11.2012, 14:07
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
добавил Ваш код вызова. это не мой код, это твой. Я его просто процитировал.Я попытался так сделать, но в окне это-го пункта не оказалось. Привожу скриншот окна. Преобразовать в ...вообще правильный путь для решения данной задачи: Использовать один из классов (QImage, QPixmap) на нём рисуем с помощью рисовальщика (QPainter), тогда, когда нам это удобнее. Затем полученный рисунок устанавливаем в качестве изображения метки (QLabel::setPixmap()). |
|
|
Текстовая версия | Сейчас: 6.10.2024, 21:31 |