Нарисовать фигуру в label по нажатию кнопки |
Здравствуйте, гость ( Вход | Регистрация )
Нарисовать фигуру в label по нажатию кнопки |
zuze |
10.11.2012, 15:04
Сообщение
#11
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, большое спасибо. Я сделал В Дизайнере щёлкнуть по твой метке (QLabel), правой кнопкой мыши ->"Преобразовать в ..." (Promote to) и указал там класс l. После этого эллипс стал выводиться на label и даже не надо прописывать
Теперь вся загвоздка в том чтобы рисовался эллипс по нажатию кнопки. Я пробовал так: В файле ldialog.cpp
А в конструкторе прописал
А в файл ldialog.h добавил:
Это может и сработало бы, если бы автоматически эллипс не рисовался. Но в данном случае это не подходит, так как эллипс рисуется без всякого запуск update(). 1. Что же делать? 2. И если можно расскажите пожалуйста назначение действия "В Дизайнере щёлкнуть по твой метке (QLabel), правой кнопкой мыши ->"Преобразовать в ..." (Promote to) и указал там класс l"? |
|
|
Litkevich Yuriy |
11.11.2012, 5:07
Сообщение
#12
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Я пробовал так: так как эллипс рисуется без всякого запуск update(). что ты ожидаешь от метода update()?2. И если можно расскажите пожалуйста назначение действия "В Дизайнере щёлкнуть по твой метке (QLabel), правой кнопкой мыши ->"Преобразовать в ..." (Promote to) и указал там класс l"? Просто дизайнер будет создавать ui-файл, в котором вместо виджета типа Х упоминается его наследник. А во время дизайна (для наглядности) используется базовый класс.
|
|
|
zuze |
11.11.2012, 8:17
Сообщение
#13
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
что ты ожидаешь от метода update()? Как я понял update() помечает элемент, как требующий перерисовки. А я думал, что он будет отключать автоматическое рисование на элементе и позволит нарисовать, только при нажатии кнопки. Что тогда надо сделать, что бы заработало у меня? |
|
|
zuze |
11.11.2012, 10:41
Сообщение
#14
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как я понял, чтобы рисовалось по нажатию кнопки надо сделать так было:
1. в файле l.h добавить
2. В файле l.cpp добавить в конструктор
3. В файле l.cpp изменить метод paintEvent(QPaintEvent *)
4. В файле ldialog.cpp изменить метод onClick()
Но так как в этом классе переменная FlagDraw не видна пытался добавить в файл ldialog.h
Но это не помогло, что можно придумать, что бы FlagDraw была видна в классе ldialog или вообще как-то иначе надо было делать? Прошу прощения в посте в место класса ldialog я случайно написал locatordialog, а в место класса l я случайно написал locator. Сам поправить свой пост не мог, так как почем-то нет таких прав, даже профиль не могу свой изменить, хотя авторизацию на форуме прошёл. Писал в администрацию форума, но она мне не ответила. |
|
|
Litkevich Yuriy |
11.11.2012, 14:12
Сообщение
#15
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Как я понял update() помечает элемент, как требующий перерисовки. только пометка о необходимости принудительно перерисовать виджет (вызвать его метод repaint()). Обычно перерисовка происходит при изменении размеров виджета. А вот когда происходит изменение его содержимого, программист должен сам вызвать этот метод.Что тогда надо сделать, что бы заработало у меня? вообще правильный путь для решения данной задачи:
Использовать один из классов (QImage, QPixmap) на нём рисуем с помощью рисовальщика (QPainter), тогда, когда нам это удобнее. Затем полученный рисунок устанавливаем в качестве изображения метки (QLabel::setPixmap()). |
|
|
zuze |
11.11.2012, 14:19
Сообщение
#16
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, я так понял, что бы FlagDraw была видна в классе ldialog, то нужно передать с помощью Сигнала её. Не могли бы Вы рассказать как правильно это сделать?
|
|
|
zuze |
11.11.2012, 17:21
Сообщение
#17
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача решена. У меня заработало. Выкладываю, может кому пригодиться.
1. Создаём проект GUI 2. В дизайнере выставляем label и pushButton на форуму окна программы 3. Создаём произвольный класс от класса QLabel
4. Класс при создании проекта имеет вид
5. В Дизайнере щёлкнуть по метке Label, правой кнопкой мыши ->"Преобразовать в ..." (Promote to) и указал там класс l" и поставить галочку, там, где это будет предложено. |
|
|
Текстовая версия | Сейчас: 6.10.2024, 19:26 |