diff options
Diffstat (limited to 'tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp')
-rw-r--r-- | tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp index 6d47d5cfb6..f5d9433f70 100644 --- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -33,6 +33,7 @@ #include <QMetaObject> #include <private/qstylesheetstyle_p.h> +#include <private/qhighdpiscaling_p.h> #include <QtTest/private/qtesthelpers_p.h> using namespace QTestPrivate; @@ -98,7 +99,12 @@ private slots: void widgetStyle(); void appStyle(); void QTBUG11658_cachecrash(); + void styleSheetTargetAttribute(); void unpolish(); + + void highdpiImages_data(); + void highdpiImages(); + private: QColor COLOR(const QWidget& w) { w.ensurePolished(); @@ -2000,6 +2006,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); +} + void tst_QStyleSheetStyle::unpolish() { QWidget w; @@ -2011,6 +2070,35 @@ void tst_QStyleSheetStyle::unpolish() QCOMPARE(w.minimumWidth(), 0); } +void tst_QStyleSheetStyle::highdpiImages_data() +{ + QTest::addColumn<qreal>("screenFactor"); + QTest::addColumn<QColor>("color"); + + QTest::newRow("highdpi") << 2.0 << QColor(0x00, 0xFF, 0x00); + QTest::newRow("lowdpi") << 1.0 << QColor(0xFF, 0x00, 0x00); +} + +void tst_QStyleSheetStyle::highdpiImages() +{ + QFETCH(qreal, screenFactor); + QFETCH(QColor, color); + + QWidget w; + QScreen *screen = QGuiApplication::screenAt(w.pos()); + QHighDpiScaling::setScreenFactor(screen, screenFactor); + w.setStyleSheet("QWidget { background-image: url(\":/images/testimage.png\"); }"); + w.show(); + + QVERIFY(QTest::qWaitForWindowExposed(&w)); + QImage image(w.size(), QImage::Format_ARGB32); + w.render(&image); + QVERIFY(testForColors(image, color)); + + QHighDpiScaling::setScreenFactor(screen, 1.0); + QHighDpiScaling::updateHighDpiScaling(); // reset to normal +} + QTEST_MAIN(tst_QStyleSheetStyle) #include "tst_qstylesheetstyle.moc" |