Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Инверсия фона PushButton


Автор: plica98 8.2.2013, 12:12
Добрый день, Qt-шники.

Нужна ваша консультация.
Есть кнопочная панель 16х16 (компоновка табличного размещения pgrLayout - своего рода калькулятор).
Кнопки пронумерованы 1, ... 256 (текст кнопки).
Каждая кнопка должна задавть двоичное значение 1 или 0.
Каждое нажатие кнопки инвертирует ее значение 1/0.
Хотел текущее значение кнопки (1/0) показывать либо цветом фона, либо цветом текста кнопки.

Но измениь цвет фона (текста) с помощью QPalette что-то не получается.
Возможно ли это ? Может что-то не так делаю ? Тогда как?  Подскажите.

Заранее благодарю за помощь.

Автор: Amp 8.2.2013, 14:53
Почему бы QPushButton просто не сделать checkable?

Автор: plica98 8.2.2013, 15:00
Цитата(Amp @  8.2.2013,  14:53 Найти цитируемый пост)
Почему бы QPushButton просто не сделать checkable? 



И что мне это даст?

Автор: Amp 8.2.2013, 15:13
Это даст то, что кнопка сможет фиксировать свое нажатое состоение. В итоге у нее будет два состояния - нажат и отжата.

Автор: plica98 8.2.2013, 15:20
Цитата(Amp @  8.2.2013,  15:13 Найти цитируемый пост)
Это даст то, что кнопка сможет фиксировать свое нажатое состоение. В итоге у нее будет два состояния - нажат и отжата. 


Amp, спасибо.

Посмотрел, как вариант можно рассматривать (но все-же хотелось цветом).

Визуально, мне так кажется, будет тяжело определить - нажата или отжата кнопка.

Цветом более наглядно. Например:  "зеленый" - 1,  "серый" - 0.

Автор: _GRIN_ 8.2.2013, 17:56
Цитата(plica98 @  8.2.2013,  10:12 Найти цитируемый пост)
Но измениь цвет фона (текста) с помощью QPalette что-то не получается.
Возможно ли это ? Может что-то не так делаю ? Тогда как?  Подскажите.


Самый простой вариант через StyleSheet
Код

but->setCheckable( true );
but->setStyleSheet( "QPushButton:checked{ background-color: darkgreen }"
                                "QPushButton:!checked{ background-color: green }" );

Можно конечно отлавливать клик (что бы чекабл не делать) и там через палтиры рулить.
Но лично я с палитрами каждый раз заново эксперементирую, т.к. они в частности зависят от QPalette::BackgroundRole, который может от родительского виджета наследоваться и т.д. - я бы не советовал =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)