From c83ea33ceb95aa705085a970ce619d37439c98cb Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 9 May 2018 23:04:00 +1000 Subject: Add attribute to indicate a widget was the target of a style sheet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Qt already has the widget attribute WA_StyleSheet to which indicates that a widget was subject to a style sheet, but it doesn't indicate that the widget was actually affected by the style sheet. For example, an application style sheet will set the WA_StyleSheet attribute on all widgets, even if it only targets QPushButtons. The WA_StyleSheetTarget new attribute pairs with WA_StyleSheet to give this extra information. [ChangeLog][QtWidgets] Added the Qt::WA_StyleSheetTarget attribute to indicate that a widget was affected by a style sheet. Change-Id: I7cca18ddec8fbb69f294ae2ef990672a5f4f1d83 Reviewed-by: Gabriel de Dietrich Reviewed-by: Sérgio Martins --- .../qstylesheetstyle/tst_qstylesheetstyle.cpp | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'tests/auto/widgets/styles') diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp index 28a099de83..6a4d972baf 100644 --- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -98,6 +98,8 @@ private slots: void widgetStyle(); void appStyle(); void QTBUG11658_cachecrash(); + void styleSheetTargetAttribute(); + private: QColor COLOR(const QWidget& w) { w.ensurePolished(); @@ -1999,6 +2001,59 @@ void tst_QStyleSheetStyle::widgetStylePropagation() QCOMPARE(COLOR(childLabel), childExpectedColor); } +void tst_QStyleSheetStyle::styleSheetTargetAttribute() +{ + QGroupBox gb; + QLabel lb(&gb); + QPushButton pb(&lb); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), false); + + qApp->setStyleSheet("QPushButton { background-color: blue; }"); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), true); + + qApp->setStyleSheet("QGroupBox { background-color: blue; }"); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), true); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), false); + + qApp->setStyleSheet("QGroupBox * { background-color: blue; }"); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), true); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), true); + + qApp->setStyleSheet("* { background-color: blue; }"); + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), true); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), true); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), true); + + qApp->setStyleSheet("QLabel { font-size: 32pt; }"); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), true); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), false); + + qApp->setStyleSheet(""); + + gb.ensurePolished(); lb.ensurePolished(); pb.ensurePolished(); + QCOMPARE(gb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(lb.testAttribute(Qt::WA_StyleSheetTarget), false); + QCOMPARE(pb.testAttribute(Qt::WA_StyleSheetTarget), false); +} + QTEST_MAIN(tst_QStyleSheetStyle) #include "tst_qstylesheetstyle.moc" -- cgit v1.2.3