Версия для печати темы
Форум на CrossPlatform.RU _ Qt GUI _ QPushButton - рисовать на кнопке
Автор: flankerr 22.2.2008, 13:07
Какой есть максимально простой способ вывести картинку на кнопку ?
Автор: ViGOur 22.2.2008, 13:09
Например так:
pButton->setIcon( QIcon(":/images/image.png"));
Автор: flankerr 22.2.2008, 13:17
Слона то я и не увидел, спаисбо
а елси мне надо чтонить нарисовать, то надо делать производный класс от кнопки или можно как то из "родного" диалога ?
Автор: ViGOur 22.2.2008, 13:20
Лучше производный класс от кнопки, и там рисовать.Ты можешь рисовать и в диалоге, но кнопка все свое перерисовывает сама.
Автор: flankerr 22.2.2008, 13:23
А если отловить сигнал пересовки кнопки из "родного" диалога и в диалоге просто добавить функцию отрисовки ?
Автор: ViGOur 22.2.2008, 13:26
думаю, что не стоит...
Автор: flankerr 22.2.2008, 13:33
просто городить огород с наследованием ради такой мелочи как-то...
Автор: ViGOur 22.2.2008, 13:40
Хотя, можно попробовать.
p.s. Просто я сначала не о том подумал, cейчас в MFC ковыряюсь и плююсь...
Автор: flankerr 22.2.2008, 15:04
Вопрос как выловить?
paintEvent
защищённая функция а сигнала я не нашёл...
Автор: trdm 22.2.2008, 15:20
Она же виртуальная. Просто переопредели...
class Q......... : public QWidget
{
Q_OBJECT
public:
Q.........(QWidget *parent = 0);
virtual ~Q.........();
protected:
void paintEvent(QPaintEvent *event);
};
void Q.........::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
int v_size_widget =height()-1; /// вертикальныйц размер виджета
int h_size_widget =width()-1; /// горизонтальный размер виджета
...........
};
Автор: flankerr 22.2.2008, 16:10
Цитата(trdm @ 22.2.2008, 15:20)

Она же виртуальная. Просто переопредели...
Ты не понял сути вопроса...
ТО что она виртуальная не делает её сигналом и не даёт мне возможность обработать сигнал отрисовки В ДРУГОМ объекте
А мне как раз и надо установить обработчик события отрисовки кнопки внутри диалога родителя.
Автор: trdm 22.2.2008, 16:32
Цитата(flankerr @ 22.2.2008, 16:10)

ТО что она виртуальная не делает её сигналом и не даёт мне возможность обработать сигнал отрисовки В ДРУГОМ объекте
А мне как раз и надо установить обработчик события отрисовки кнопки внутри диалога родителя.
Странное хочу. Но тут я тебе не смогу помочь..
Автор: trdm 22.2.2008, 16:38
наверное можно попробовать так:
Всетаки переопределить у кнопки paintEvent, а из переопределенного paintEvent-та уже слать сигнал паренту.
Так пойдет? Хотя мне почему то такой подход не нравится.
Автор: ViGOur 22.2.2008, 16:39
В полне возможно, что paintEvent дергается из paintEvent родителя для всех дочерних виджетов, без каких либо сигналов.
А виртуальная она на случай, если ты переопределишь класс виджета.
Другими словами, может быть просто сигналов перерисовки нет.
Автор: flankerr 22.2.2008, 17:25
Цитата(trdm @ 22.2.2008, 16:38)

наверное можно попробовать так:
Всетаки переопределить у кнопки paintEvent, а из переопределенного paintEvent-та уже слать сигнал паренту.
Так пойдет? Хотя мне почему то такой подход не нравится.
И снова недопонимание сути

Задача:
Отрисовать на кнопке ченить БЕЗ создание наследников кнопки (прям из родительского диалога)
Создать наследника секудное дело, но потом это выливается лишнем гемороем. Т.к. форма для быстроты и наглядности была созданы в редакторе форм и каждый раз перписывать что кнопка наследуется от другого класса...
Вообще странно в тех же виндах такого гемора с рисованем нет...
Автор: Litkevich Yuriy 22.2.2008, 21:50
Вот сделал ты в дезайнере окно, получил файл foo.ui, сделай еще так:
uic foo.ui -o foo.h
получишь Сишный файл диалога, подкорректируй его, если тебе нужно часто менять рисунок на кнопке, приделай метод который будет устанавливать на кнопку нужную иконку, иконки можешь хранить в нутри исполняемого файла или с наружи, помоему так гараздо быстрее и проще, чем городить огород с обработчиками рисования.
Автор: flankerr 26.2.2008, 11:57
Цитата(Litkevich Yuriy @ 22.2.2008, 21:50)

устанавливать на кнопку нужную иконку, иконки можешь хранить в нутри исполняемого файла или с наружи, помоему так гараздо быстрее и проще, чем городить огород с обработчиками рисования.
Если на кнопке может быть два три изображения тогда да - seticon - и нет проблем, а вот если больше...
Ну допустим надо кнопку раскрасить в определённый цвет а цвет выбирает пользователь произвольным образом.
Автор: ViGOur 26.2.2008, 12:01
Цитата(flankerr @ 26.2.2008, 11:57)

Если на кнопке может быть два три изображения тогда да - seticon - и нет проблем, а вот если больше...
Да хоть 100.

Лучше не полениться и переопределить класс.
Цитата(flankerr @ 26.2.2008, 11:57)

Ну допустим надо кнопку раскрасить в определённый цвет а цвет выбирает пользователь произвольным образом.
Создаешь метод setColor в производном классе кнопки и все.
Автор: flankerr 26.2.2008, 17:54
Ну нафига мне в сотый раз говрить про наследников... Производный класс в моём случае это ГЕМОР.
Мне проще идею по другому реализовать чем производный класс лепить.
Всётаки в виндах это более человечно сделано.
Автор: trdm 1.5.2008, 0:53
Цитата(flankerr @ 26.2.2008, 18:54)

Всётаки в виндах это более человечно сделано.
да, винда это отличная графическая библиотека. без сомнения
Автор: Гость 26.6.2008, 6:42
понаследуй от кнопки класс и сделай плагин к дизайнеру. и разбрасывай свою цветную кнопку в дизайне сколько влезет [~del by admin]
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)