Что я имею :-
У меня есть собственный виджет, который расширяет QFrame (вместо QWidget, так как QFrame уже имеет рабочую реализацию paintEvent). Я переопределил mousePressed () и mouseReleased (), чтобы испустить сигналы selected () release () и clicked (). Все до сего момента идет хорошо, как и ожидалось.
Что мне нужно :-
Этот пользовательский виджет имеет базовую поддержку таблиц стилей и прекрасно поддерживает состояние: hover.
Но: нажатое состояние не работает. Я уже понял, что это bcoz, он не поддерживается QFrame / QLabel и т. Д.
Я хотел бы знать, что мне нужно сделать, чтобы поддерживать: нажатие.
Должен ли я установить какой-либо атрибут / свойство на нажатие и отпускание или что-нибудь еще?
Вы можете установить свойство для вашего QLabel
(или любой другой виджет, который вы используете) и измените значение этого свойства. Затем вы используете это свойство в ваших таблицах стилей.
Пример:
this->setStyleSheet("*[myproperty=\"true\"] { background-color: red }");
d_label = new QLabel("dynamic label", this);
d_label->setProperty("myproperty", false);
Затем в вашем mousePressEvent вы устанавливаете, а в mouseReleaseEvent вы сбрасываете это свойство:
d_label->setProperty("myproperty", true); // or false when you wish to unset it
style()->unpolish(d_label);
style()->polish(d_label); // force a stylesheet recomputation
Вы можете сделать setStyleSheet () в mousePressEvent и mouseReleaseEvent со стилем, который вам нужен?