Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: enola от Сентябрь 19, 2006, 12:50



Название: "своя" кнопка
Отправлено: enola от Сентябрь 19, 2006, 12:50
Есть потребность в создании собственной кнопки, почитал инфу по данной теме, понял что стандартный подход от Trolltech это создание собственного стиля. Нашел пример в Qt, но правда такой навернутый.
У меня есть две картинки кнопки - отжатое и нажатое состояние, нужно по ним сделать кнопку.
Может кто-нибудь маленький примерчик скинуть как делается этот стиль для кнопки, или ссылку. [/list]


Название: "своя" кнопка
Отправлено: BaltikS от Сентябрь 19, 2006, 18:53
А по-моему всё несложно...
1) Унаследываемся от QPushButton
2) В painEvent-е ставим условие if (isDown()) drawPixmap1(); else drawPixmap2().

P.S. Это для 3 QT, для 4 возможно название классов и методов отличается. Не помню просто...


Название: "своя" кнопка
Отправлено: QCasper от Сентябрь 19, 2006, 20:37
Цитата: "BaltikS"
А по-моему всё несложно...
1) Унаследываемся от QPushButton
2) В painEvent-е ставим условие if (isDown()) drawPixmap1(); else drawPixmap2().

P.S. Это для 3 QT, для 4 возможно название классов и методов отличается. Не помню просто...


для 4 точно также


Название: "своя" кнопка
Отправлено: enola от Сентябрь 20, 2006, 06:48
спасибо, щас попробуем :)

добавлено спустя 54 минуты:

 получилось :)

правда возникли еще вопросы:
[list=1]
  • Для того, чтобы caption был нужно свои свойства определять?
  • Для картинки на кнопке тоже?
  • [/list:o]


Название: "своя" кнопка
Отправлено: C.H. от Сентябрь 20, 2006, 10:26
вот есть штука http://www.trolltech.com/customers/coolapps/GUIArtist в ней можно рисовать свои кнопки и не только...


Название: "своя" кнопка
Отправлено: enola от Сентябрь 20, 2006, 13:31
как с ней работать и где ее взять?


Название: "своя" кнопка
Отправлено: C.H. от Сентябрь 20, 2006, 13:45
брать тут http://www.gui-artist.de/4.0.html?&L=7
но тока там демо-версия :(


Название: "своя" кнопка
Отправлено: enola от Сентябрь 20, 2006, 13:49
а зачем тогда предлагать если только демо версия? :)


Название: "своя" кнопка
Отправлено: C.H. от Сентябрь 20, 2006, 13:52
ну дык может кому-тои демки хватит - нариосвать одну кнопочку, а вообще глядеть надо!


Название: "своя" кнопка
Отправлено: enola от Сентябрь 20, 2006, 14:43
так мне и не сказали как иконку добавить и надпись?


Название: "своя" кнопка
Отправлено: BaltikS от Сентябрь 21, 2006, 06:35
Цитата: "enola"
так мне и не сказали как иконку добавить и надпись?

Ну это чуть чуть подумать надо было....
Иконка ..... drawPixmap(x,y, iconSet()->pixmap());
Текст ....drawText(x,y,align, text());
Координаты надеюсь сам посчитаешь  :wink: ......


Название: "своя" кнопка
Отправлено: enola от Сентябрь 21, 2006, 06:44
:) до этого я и сам додумался, чай не тупой.
Думал может можно как-нибудь по-другому, ну если так, то уже сделал.
спасибо всем.


Название: "своя" кнопка
Отправлено: Sergey B. от Сентябрь 22, 2006, 09:28
А кто нибудь пробовал свой стиль рисовать?
Картинки это хорошо, но вот если нужно много всего... тыж не будешь на каждый GUI элемент картинки искать...
А как нарисовать таблицу...
По типу артура, т.е. так как сами Trollи рисуют... Так сказать математически...


Название: "своя" кнопка
Отправлено: enola от Сентябрь 22, 2006, 10:33
Я хотел попробовать для кнопки нарисовать, но BaltikS предложил метод для paintEvent и мне хватило, а вообще тема очень интересная.


Название: "своя" кнопка
Отправлено: BaltikS от Сентябрь 22, 2006, 10:37
Если тебе нужна только кнопка, то стиль писать свой думаю бесмысленно, а если набор виджетов, то конечно проще стиль.
Sergey B. да и стиль я тоже рисовал. Там вроде как всё просто даже по-моему пример где то в Examples-ах валялся.


Название: "своя" кнопка
Отправлено: enola от Сентябрь 22, 2006, 11:18
А могешь пример скинуть если не жалко :)


Название: "своя" кнопка
Отправлено: Sergey B. от Сентябрь 22, 2006, 12:22
Цитата: "enola"
А могешь пример скинуть если не жалко :)


+1  :D


Название: "своя" кнопка
Отправлено: BaltikS от Сентябрь 22, 2006, 19:12
Да не жалко в принципе, вот пример для 4 с исполняемым файлом....
Для 3 тоже сгодится с небольшими передлками http://www.baltiksoft.com/styles.rar


Название: "своя" кнопка
Отправлено: Dendy от Сентябрь 22, 2006, 19:39
Для того, чтобьІ переопределить стиль кнопки необязательно от неё наследоваться. Гораздо проще перехватить собьІтие. Так вьІ сможете переопределить стиль уже созданньІх кнопок, например в QMessageBox.
Также не нужно рисовать всю кнопку: надпись гораздо проще и функциональнее рисует стиль.

Код:

class ButtonPainter : public QObject
{
public:
  void addButton( QAbstractButton * button )
  {
    button->installEventFilter( this );
  }

protected:
  bool eventFilter( QObject * o, QEvent * e )
  {
    QAbstractButton * button = qobject_cast<QAbstractButton*>( o );
    if ( button && e->type() == QEvent::Paint )
    {
      QStyleOptionButton option;
      option.initFrom( button );
      QPainter p( button );
      p.drawImage( QPoint( 0, 0 ), button->isDown() ? down_image : up_image );
      QStylePainter( button ).drawControl( QStyle::CE_PushButtonLabel, option );
      return true;
    }
    return false;
  }
};