L1R1KA 0 / 0 / 0 Регистрация: 19.04.2022 Сообщений: 4 |
||||
1 |
||||
Поменять цвет у кнопки19.04.2022, 13:58. Показов 2304. Ответов 6 Метки c++ 1 курс, qt creator (Все метки)
Здравствуйте. Я начинающий программист(студент). Прошу помочь. Мне дали доп задание, ломаю голову как его сделать. звучит так: Должна быть кнопка(button) , которая будет менять цвет. 4 нажатиия — 4 цвета(красный, зелёный , жёлтый , синий) и так будет повторяться в той же последовательности, до 16 нажатий, после чего программа закроется.
__________________
0 |
Алексей1153 фрилансер 4488 / 3997 / 872 Регистрация: 11.10.2019 Сообщений: 10,526 |
||||
19.04.2022, 14:55 |
2 |
|||
L1R1KA,
1 |
kapbepucm 1332 / 591 / 287 Регистрация: 02.05.2020 Сообщений: 1,418 |
||||
20.04.2022, 13:38 |
3 |
|||
дополню код Алексей1153:
1 |
фрилансер 4488 / 3997 / 872 Регистрация: 11.10.2019 Сообщений: 10,526 |
|
20.04.2022, 13:56 |
4 |
kapbepucm, ага, я ТЗ не дочитал )
0 |
0 / 0 / 0 Регистрация: 19.04.2022 Сообщений: 4 |
|
20.04.2022, 16:11 [ТС] |
5 |
А есть возможность объяснить что тут написано или более проще написать, более тапорно что-ли?(для новичков)
0 |
1332 / 591 / 287 Регистрация: 02.05.2020 Сообщений: 1,418 |
|
20.04.2022, 16:53 |
6 |
Всё, что находится внутри Инициализация переменных, где встречаете вначале static, выполняется только при первом вызове (клике), потом эти строки мысленно можете опускать Добавлено через 3 минуты
1 |
Ender Che 323 / 232 / 50 Регистрация: 29.05.2018 Сообщений: 666 |
||||||||
20.04.2022, 18:52 |
7 |
|||||||
widget.h
widget.cpp
0 |
Я хочу изменить цвет кнопки в QT после нажатия кнопки. Проблема в том, что когда у меня несколько кнопок, все цвета кнопки меняются. Как я могу сделать только тот, который я нажал на Изменить? PS: я новичок, поэтому было бы очень хорошо, если бы вы могли объяснить свое решение в деталях, sry: D.
2 ответа
Короткий ответ: ваша QSS неверна для ваших целей, QPushButton — это стиль для всего класса QPushButton (и его предков) , поэтому текущий результат. Используйте #yourButtonName , и это будет работать.
Код и пояснения:
Получить имя кнопки в слоте можно через sender() , но использовать ее так же, как вы делаете сейчас, было бы немного уродливо, посмотрите сами:
Примечание: connect используется вместо созданного дизайнером слота, а sender() используется, так что вы можете повторно использовать этот слот для других кнопок.
Ну, иногда вам захочется написать меньше кода, генерирующего стили, потому что он быстро становится нечитаемым, а затем динамические свойства становятся полезными:
Таким образом вы заставляете виджет «запоминать» какое-то состояние в свойстве, более аккуратным способом, ИМХО. Кроме того, этот небольшой взлом с QStyle становится обязательным. Сам стиль для нажатых кнопок может быть добавлен только один раз в таблицу стилей MainWindow (я сделал это в Qt Designer, вы также можете сделать это в конструкторе):
Как я могу сделать только тот, который я нажал на Изменить? Вы устанавливаете свойство для экземпляра кнопки затем:
Кроссплатформенное приложение на Qt: Таблицы стилей
Сегодня я хотел бы рассмотреть вопрос кастомизации интерфейса программ на Qt. Основным вариантом является использование Qt Style Sheets. Как становится очевидно из названия, это немного специфичный аналог привычных всем каскадных таблиц стилей (CSS2), без которых немыслим современный интернет. QSS чаще всего применяются для двух вещей: либо доточить какой-нибудь виджет до более родного вида, либо наоборот, сделать интерфейс более нарядным, выделяющимся, возможно одинаковым на всех платформах.
- Сегментные кнопки
- Обычные кнопки
- Таблицы
- Скроллбары
Основы
Итак, создаем файл стилей, применяем его глобально к приложению:
Есть отличный перевод официальной документации по синтаксису таблиц стилей, так что замечу лишь, что чаще других используется три способа описания виджетов, к которым будет применен стиль (селекторы):
Обращение по классу, например такое правило будет применено ко всем кнопкам вашего приложения, цвет фона будет изменен на красный:
Обращение по имени, тогда это правило будет применено только к тем кнопкам, которые имеют имя «okButton»:
Причем если на одной и той же форме есть несколько элементов, к которым нужно применить одинаковый стиль, можно воспользоваться методом setObjectName:
Обращение по иерархии виджетов на форме, тогда правило будет применено только к тем кнопкам, которые лежат внутри рамки с именем «mainFrame»:
Отдельно нужно сказать о задании стилей для подэлементов и псевдо-состояний:
Псевдо-состояния указываются в конце селектора, отделяются двоеточием (:). Например, следующее правило применяется, когда мышь находится над QPushButton:
Сложные виджеты содержат в себе подэлементы, потому для изменения оформления можно получить доступ к каждому из них, для этого используется оператор «::». Например, мы хотим изменить/убрать стрелочку, показывающую, что кнопке назначено меню, в таком случае правило будет выглядеть следующим образом:
К сожалению, чтобы описать все возможности потребуется полнокровный учебник по CSS, потому переходим к примерам.
Кнопки сегментные
У меня две новости: одна хорошая, а другая не очень. Печаль в том, что QSS не поддерживает отрисовку теней. Совсем. Потому если сделать обычное состояние сегментных кнопок в общем-то не сложно, то нажатое… в общем только картинки.
Вот стили, ответственные за это безобразие:
Состояние :pressed нужно указывать для того, чтобы не было лага при его прохождении.
Кнопки обыкновенные
Мне известны только два варианта отображения нажатого состояния без использования теней — отразить градиент и обратить цвета. Рассмотрим второй вариант:
Таблицы
Кастомизация таблиц сделана весьма добротно, отдельно задаются стили для шапки, отдельно для самой таблицы. Есть возможность задать стили для определенных колонок (секций) шапки через подэлемент ::section. Для этого реализованы псевдо-состояния :first, :last, :only-one, :next-selected, :previous-selected, :selected, :horizontal, :vertical и :checked.
Скроллбары
Основными настраиваемыми элементами являются две стрелочки по краям и хэндл, за который, собственно можно ухватить мышкой:
Как изменить цвет кнопки qt c
Нужно переопределить QPushButton::paintEvent, что там у него в нутрях вертиться а?
Добавлено 02.12.09, 15:27
Суть в том что QPushButton::paintEvent Перерисовывает кнопку + задает ей серый цвет. а мне нужен другой.
для не нажатой кнопки background-color:
pushButton->setStyleSheet(QString::fromUtf8(«background-color: rgb(244, 115, 255);»));
|
|
|
Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
- При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
- Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
- Нарушение Правил может повлечь наказание со стороны модераторов.
Полезные ссылки:
Boost по-русски
Qt по-русски
Как сменить цвет кнопки в QT?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Сабж. |
Radagast |
|
QWidget::setStylesheet |
Painkiller |
|
В 3 тьем QT такого нету… мне просто нужно изменить цвет нажатой кнопки… |
Painkiller |
|
Нужно переопределить QPushButton::paintEvent, что там у него в нутрях вертиться а? Добавлено 02.12.09, 15:27 |
miksayer |
|
Цитата Painkiller @ 02.12.09, 09:51 В 3 тьем QT такого нету а в чем смысл использовать такую древность? кстати, вчера вышла Qt 4.6 |
_lcf_ |
|
для не нажатой кнопки background-color: pushButton->setStyleSheet(QString::fromUtf8(«background-color: rgb(244, 115, 255);»)); для нажатой ничего нет… |
miksayer |
|
_lcf_, дык 3й Кют еще не поддерживает таблицы стилей |
Radagast |
|
Painkiller |
Painkiller |
|
Так он же вроде не OpenSource больше… не? А старых исходников у меня нету… |
Painkiller |
|
Вопрос решен, всем спасибо. |
miksayer |
|
Цитата Painkiller @ 03.12.09, 09:11 Вопрос решен, всем спасибо. а решение выложить не хочешь? Цитата Painkiller @ 03.12.09, 09:11 Так он же вроде не OpenSource больше… Кют ? еще как опен-сорс, просто есть коммерческая и опен-сорс версии |
Painkiller |
|
if( down == true ) { QPalette Palette( «brown» ); this->setPalette( Palette ); }else { QPalette Palette( «gray» ); this->setPalette( Palette ); }; — Это в переопределенном PainEvent( ) |
Radagast |
|
Painkiller |
Painkiller |
|
Разве? Спасибо, завтра гляну… |
_lcf_ |
|
Цитата Radagast @ 11.12.09, 20:35 разве setPalette не провоцирует перерисовку?
|
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets
- Следующая тема
[ Script execution time: 0,0350 ] [ 16 queries used ] [ Generated: 12.02.23, 20:55 GMT ]