Название: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 15:02 Подскажите пожалуйста как изменить стиль для разных состояний кнопок, к примеру по мануалу
Цитировать The only issue remaining is that the button doesn't react when we press it. We can fix this by specifying a slightly different background color and use a different border style. QPushButton#evilButton { background-color: red; border-style: outset; border-width: 2px; border-radius: 10px; border-color: beige; font: bold 14px; min-width: 10em; padding: 6px; } QPushButton#evilButton:pressed { background-color: rgb(224, 0, 0); border-style: inset; } У меня есть кнопки в приложении которые создаются так: test.h Код: QPushButton *ab1; Код: ab1 = new QPushButton(tr("TestButton"), this); Как для этих кнопок переопределить pressed стиль как сказанно в мануале ? Пробовал делать это по сигналу (через слот) - Код: ab1->setStyleSheet("background-color: rgb(224, 0, 0); border-style: inset;"); Заранее спасибо! Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 15:05 работает..но если там 100 кнопок...для каждой по 2 доп сигнала =+ 200 connect и + 200 слотов - будет тормозить т.е. это кривой способ. Ты один раз задай стиль для всего диалога, а в нем укажи как рисовать кнопки в разных состояниях. Какие connect'ы... ;)Заранее спасибо! Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 15:10 Проблема в том, что кнопки разные..т.е. есть и обычные и такие.. + некоторые будут менять цвет фона по определенныем сигналам из программы.
+ т.к. я новичек в qt то не знаю как задать стить для всего диалога или всех кнопок..примерно представляю, что нужно наследоваться от пашбаттона и переопределить функции void custombutton::pressed {} и т.д., а как именно это сделать не знаю...здесь на форуме такой информации нет, на форуме тролей тоже, был бы очень признателен если бы кто-нибудь показал рабочий пример с 2-3 разными стилями кнопок. ??? п.с. это бы кстати пригодилось и в другом вопросе-мигание кнопки...опять же как я понимаю нужно наследоваться от пашбаттона и добавить функцию смены цвета-по вызову из программы к примеру Код: ab1->blink(green); Код: ab1->stopblink(); help me :( Название: Re: pushbutton + stylesheet Отправлено: Khs от Март 19, 2009, 15:11 можно глянуть: qt\examples\widgets\stylesheet
Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 15:20 Там ипользуются прямые ссылки и фиксированные названия кнопок поэтому не понятно как наследоваться от пашбаттона (ведь кнопок может быть очень много..и если посылать сигнал мигания на 100 кнопок это довольно много кода т.к. нужно указывать имена кнопок + куча таймеров в основном коде..все становится слишком громоздко), а если добавить доп функцию в кастом кнопку то смена цвета будет производиться при вызове всего 1 функции к примеру
Код: ab1->blink(green); Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 15:22 Код Имя объекта будет означать тип. Дальше в стилях: Код: QPushButton#Type1 { P.S. Сам именно такой способ не использовал (не проверял), попробуй. Также можно сделать несколько классов-наследников от QPushButton и в стилях для каждого класса писать не QPushButton#Type2, а имя класса-наследника. Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 15:38 Спасибо, только не совсем понятно где описывать стиль (без использования дизайнера..т.е. случай когда кнопки создаются руками в коде)
Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 16:30 Спасибо, только не совсем понятно где описывать стиль (без использования дизайнера..т.е. случай когда кнопки создаются руками в коде) Можно написать стиль в отдельном файле, загружать текст из него и устанавливать.А можно и весь этот текст оформит одной строкой и устанавливать. Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 17:06 Понятно, спасибо.
Остался один вопрос - как наследоваться от абстрактбаттона и добавить функцию мигания (саму функцию понятно как реализовать-с помощью style sheet менять цвет, а вот как это описать..)? т.е. наследуемся и просто пишем Цитировать class custombutton : public QAbstractButton { Q_OBJECT public: custombutton(QWidget* parent = 0); private: void startblink(QString color); void stoptblink(); int status; QTimer *timer; private slots: void blink(QString color); ... В конструкторе - timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(blink())); Далее... void custombutton::startblink(QString color) { status=1; blink(color); } void custombutton::stopblink() { status=0; } void custombutton::blink(QString color) { if (status == 1) then { if (blink == 1){ this.setStyleSheet("color: red"); } ---------------------что вместо этого текста ? blink =0; timer->start(200); } else { this.setStyleSheet(" border: 4px solid silver; color: green"); ---------------------что вместо этого текста ? blink = 1; timer->start(200); } } Как нечто подобное написать в кастомкнопке которая наследуется ? Что писать вместо "this.setStyleSheet", чтобы менялся цвет кнопки для которой пришел вызов типа ab1->blink(green); (выбор цвета я в коде выше опустил для простоты...но это в итоге будет) ? Нужно ли в частях которые переписываются (к примеру конструктор) брать из исходников оригинальный текст и копипастить ? Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 17:33 Что писать вместо "this.setStyleSheet" this это указатель:this->setStyleSheet(....) или просто setStyleSheet(....) Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 17:51 т.е. идея и реализация вообщем правильны ? Нужно ли переписывать код конструктора из исходников абстрактбаттона(т.к. я добавляю в него таймер)? Покажите пожалуйста рабочий код кастом кнопки (где все отличие в хотя бы 1 добавленной (пустой к примеру) функции и 1 измененной (хотя бы просто измененной добавлением коментария) стандартной.
Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 18:03 т.е. идея и реализация вообщем правильны ? Нужно ли переписывать код конструктора из исходников абстрактбаттона(т.к. я добавляю в него таймер)? Покажите пожалуйста рабочий код кастом кнопки (где все отличие в хотя бы 1 добавленной (пустой к примеру) функции и 1 измененной (хотя бы просто измененной добавлением коментария) стандартной. Я не знаю как будет работать стили после отключения мигания, попробую.Код
Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 19:10 Работает! :D
Теперь вопрос как переопределить слоты clicked\pressed и т.д. чтобы не использовать стили... Название: Re: pushbutton + stylesheet Отправлено: BRE от Март 19, 2009, 19:21 Работает! :D Так тебе стили нужны были или мигающая кнопка? :)Теперь вопрос как переопределить слоты clicked\pressed и т.д. чтобы не использовать стили... Название: Re: pushbutton + stylesheet Отправлено: yesrus от Март 19, 2009, 19:51 По сигналам из программы нужно: менять цвет кнопки (2 варианта цвета) + включать мигание 3-м цветом. - точнее кнопка изначально плоская\синяя\с нестандартной границей, возможны варианты - зеленая(все остальное как и в синей), оранжевая (все остальное как и в синей), и мигающая желтая - при этом мигание происходит между стандартным синим и желтым цветом)
Кроме того не понятно как использовать стиль из основной программы (т.е. я считал файл со стилем ...и как из класса кнопки его использовать(в конструкторе кнопки)? не считывать же заново и не хранить эти настройки для каждой кнопки отдельно) |