[Qt] Как поддержать: нажата состояние таблицы стилей для пользовательского виджета?

Что я имею :-

У меня есть собственный виджет, который расширяет QFrame (вместо QWidget, так как QFrame уже имеет рабочую реализацию paintEvent). Я переопределил mousePressed () и mouseReleased (), чтобы испустить сигналы selected () release () и clicked (). Все до сего момента идет хорошо, как и ожидалось.

Что мне нужно :-

Этот пользовательский виджет имеет базовую поддержку таблиц стилей и прекрасно поддерживает состояние: hover.
Но: нажатое состояние не работает. Я уже понял, что это bcoz, он не поддерживается QFrame / QLabel и т. Д.
Я хотел бы знать, что мне нужно сделать, чтобы поддерживать: нажатие.
Должен ли я установить какой-либо атрибут / свойство на нажатие и отпускание или что-нибудь еще?

2

Решение

Вы можете установить свойство для вашего 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
2

Другие решения

Вы можете сделать setStyleSheet () в mousePressEvent и mouseReleaseEvent со стилем, который вам нужен?

0

По вопросам рекламы [email protected]