Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на 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 - и нет проблем, а вот если больше... :rolleyes:
Ну допустим надо кнопку раскрасить в определённый цвет а цвет выбирает пользователь произвольным образом.

Автор: 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)