diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/io/qfile/BLACKLIST | 6 | ||||
-rw-r--r-- | tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 4 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/BLACKLIST | 3 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 8 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 19 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qtime/tst_qtime.cpp | 15 | ||||
-rw-r--r-- | tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp | 5 | ||||
-rw-r--r-- | tests/auto/gui/painting/qpainter/tst_qpainter.cpp | 108 | ||||
-rw-r--r-- | tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp | 83 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 11 | ||||
-rw-r--r-- | tests/manual/qtabbar/main.cpp | 74 | ||||
-rw-r--r-- | tests/manual/qtabbar/qtabbar.pro | 4 | ||||
-rw-r--r-- | tests/manual/qtabbar/tabbarform.cpp | 13 | ||||
-rw-r--r-- | tests/manual/qtabbar/tabbarform.h | 22 | ||||
-rw-r--r-- | tests/manual/qtabbar/tabbarform.ui | 182 |
15 files changed, 521 insertions, 36 deletions
diff --git a/tests/auto/corelib/io/qfile/BLACKLIST b/tests/auto/corelib/io/qfile/BLACKLIST index e3bc093c83..8d636d40b8 100644 --- a/tests/auto/corelib/io/qfile/BLACKLIST +++ b/tests/auto/corelib/io/qfile/BLACKLIST @@ -1,8 +1,10 @@ # QTBUG-48455 [readLineStdin] -msvc-2015 +msvc-2015 ci +msvc-2017 ci [readLineStdin_lineByLine] -msvc-2015 +msvc-2015 ci +msvc-2017 ci [openStandardStreamsFileDescriptors] osx [openStandardStreamsBufferedStreams] diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 0ee7599b2c..154c7ec5bf 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -568,6 +568,10 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QCOMPARE(fileChangedSpy.count(), 0); QCOMPARE(dirChangedSpy.count(), 1); + // QTBUG-61792, removal should succeed (bug on Windows which uses one change + // notification per directory). + QVERIFY(watcher.removePath(testDir.absolutePath())); + QVERIFY(temporaryDir.rmdir(testDirName)); } diff --git a/tests/auto/corelib/io/qprocess/BLACKLIST b/tests/auto/corelib/io/qprocess/BLACKLIST index 216faa7fb4..a278af12d3 100644 --- a/tests/auto/corelib/io/qprocess/BLACKLIST +++ b/tests/auto/corelib/io/qprocess/BLACKLIST @@ -2,4 +2,5 @@ redhatenterpriselinuxworkstation-6.6 # QTBUG-48455 [fileWriterProcess] -msvc-2015 +msvc-2015 ci +msvc-2017 ci diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 97fce88f19..bddc1cd2b2 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -2558,6 +2558,8 @@ void tst_QVariant::variantMap() QVariant v3 = QVariant(QMetaType::type("QMap<QString, QVariant>"), &map); QCOMPARE(qvariant_cast<QVariantMap>(v3).value("test").toInt(), 42); + QCOMPARE(v, QVariant(v.toHash())); + // multi-keys map.insertMulti("test", 47); v = map; @@ -2565,6 +2567,8 @@ void tst_QVariant::variantMap() QCOMPARE(map2, map); map2 = v.toMap(); QCOMPARE(map2, map); + + QCOMPARE(v, QVariant(v.toHash())); } void tst_QVariant::variantHash() @@ -2587,6 +2591,8 @@ void tst_QVariant::variantHash() QVariant v3 = QVariant(QMetaType::type("QHash<QString, QVariant>"), &hash); QCOMPARE(qvariant_cast<QVariantHash>(v3).value("test").toInt(), 42); + QCOMPARE(v, QVariant(v.toMap())); + // multi-keys hash.insertMulti("test", 47); v = hash; @@ -2594,6 +2600,8 @@ void tst_QVariant::variantHash() QCOMPARE(hash2, hash); hash2 = v.toHash(); QCOMPARE(hash2, hash); + + QCOMPARE(v, QVariant(v.toMap())); } class CustomQObject : public QObject { diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 661074ac16..88984feff7 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -1309,10 +1309,11 @@ void tst_QLocale::formatTime_data() QTest::newRow("28") << QTime(1, 2, 3, 456) << "H:m:s.z" << "1:2:3.456"; QTest::newRow("29") << QTime(1, 2, 3, 456) << "H:m:s.zz" << "1:2:3.456456"; QTest::newRow("30") << QTime(1, 2, 3, 456) << "H:m:s.zzz" << "1:2:3.456"; - QTest::newRow("31") << QTime(1, 2, 3, 4) << "H:m:s.z" << "1:2:3.4"; - QTest::newRow("32") << QTime(1, 2, 3, 4) << "H:m:s.zzz" << "1:2:3.004"; - QTest::newRow("33") << QTime() << "H:m:s.zzz" << ""; - QTest::newRow("34") << QTime(1, 2, 3, 4) << "dd MM yyyy H:m:s.zzz" << "dd MM yyyy 1:2:3.004"; + QTest::newRow("31") << QTime(1, 2, 3, 400) << "H:m:s.z" << "1:2:3.4"; + QTest::newRow("32") << QTime(1, 2, 3, 4) << "H:m:s.z" << "1:2:3.004"; + QTest::newRow("33") << QTime(1, 2, 3, 4) << "H:m:s.zzz" << "1:2:3.004"; + QTest::newRow("34") << QTime() << "H:m:s.zzz" << ""; + QTest::newRow("35") << QTime(1, 2, 3, 4) << "dd MM yyyy H:m:s.zzz" << "dd MM yyyy 1:2:3.004"; } void tst_QLocale::formatTime() @@ -1551,10 +1552,12 @@ void tst_QLocale::toDateTime_data() << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14"; QTest::newRow("2C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) << "d/M/yyyyy h" << "1/12/1974y 15"; - QTest::newRow("4C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0)) - << "d/M/yyyy zzz" << "1/1/1974 000"; - QTest::newRow("5C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0)) - << "dd/MM/yyy z" << "01/01/74y 0"; + QTest::newRow("4C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1)) + << "d/M/yyyy zzz" << "1/1/1974 001"; + QTest::newRow("5C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1)) + << "dd/MM/yyy z" << "01/01/74y 001"; + QTest::newRow("5Cbis") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 100)) + << "dd/MM/yyy z" << "01/01/74y 1"; QTest::newRow("8C") << "C" << QDateTime(QDate(1974, 12, 2), QTime(0, 0, 13)) << "ddddd/MMMMM/yy ss" << "Monday2/December12/74 13"; QTest::newRow("9C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 13)) diff --git a/tests/auto/corelib/tools/qtime/tst_qtime.cpp b/tests/auto/corelib/tools/qtime/tst_qtime.cpp index 71bf39fc4e..162047b537 100644 --- a/tests/auto/corelib/tools/qtime/tst_qtime.cpp +++ b/tests/auto/corelib/tools/qtime/tst_qtime.cpp @@ -560,6 +560,8 @@ void tst_QTime::fromStringFormat_data() QTest::newRow("data9") << QString("2221") << QString("hhhh") << invalidTime(); QTest::newRow("data10") << QString("02:23PM") << QString("hh:mmAP") << QTime(14,23,0,0); QTest::newRow("data11") << QString("02:23pm") << QString("hh:mmap") << QTime(14,23,0,0); + QTest::newRow("short-msecs-lt100") << QString("10:12:34:045") << QString("hh:m:ss:z") << QTime(10,12,34,45); + QTest::newRow("short-msecs-gt100") << QString("10:12:34:45") << QString("hh:m:ss:z") << QTime(10,12,34,450); } void tst_QTime::fromStringFormat() @@ -711,12 +713,13 @@ void tst_QTime::toStringFormat_data() QTest::addColumn<QString>("format"); QTest::addColumn<QString>("str"); - QTest::newRow( "data0" ) << QTime(0,0,0,0) << QString("h:m:s:z") << QString("0:0:0:0"); - QTest::newRow( "data1" ) << QTime(10,12,34,53) << QString("hh:mm:ss:zzz") << QString("10:12:34:053"); - QTest::newRow( "data2" ) << QTime(10,12,34,45) << QString("hh:m:ss:z") << QString("10:12:34:45"); - QTest::newRow( "data3" ) << QTime(10,12,34,45) << QString("hh:ss ap") << QString("10:34 am"); - QTest::newRow( "data4" ) << QTime(22,12,34,45) << QString("hh:zzz AP") << QString("10:045 PM"); - QTest::newRow( "data5" ) << QTime(230,230,230,230) << QString("hh:mm:ss") << QString(); + QTest::newRow( "midnight" ) << QTime(0,0,0,0) << QString("h:m:s:z") << QString("0:0:0:0"); + QTest::newRow( "full" ) << QTime(10,12,34,53) << QString("hh:mm:ss:zzz") << QString("10:12:34:053"); + QTest::newRow( "short-msecs-lt100" ) << QTime(10,12,34,45) << QString("hh:m:ss:z") << QString("10:12:34:045"); + QTest::newRow( "short-msecs-gt100" ) << QTime(10,12,34,450) << QString("hh:m:ss:z") << QString("10:12:34:45"); + QTest::newRow( "am-pm" ) << QTime(10,12,34,45) << QString("hh:ss ap") << QString("10:34 am"); + QTest::newRow( "AM-PM" ) << QTime(22,12,34,45) << QString("hh:zzz AP") << QString("10:045 PM"); + QTest::newRow( "invalid" ) << QTime(230,230,230,230) << QString("hh:mm:ss") << QString(); } void tst_QTime::toStringFormat() diff --git a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp index 0edc5a92ea..20cd8caad3 100644 --- a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp +++ b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp @@ -1083,6 +1083,11 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer_data() void tst_QDBusAbstractAdaptor::methodCallsPeer() { + if (QSysInfo::productType().compare("opensuse", Qt::CaseInsensitive) == 0 + && QSysInfo::productVersion() == QLatin1String("42.1") + && qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) { + QSKIP("This test is occasionally hanging in the CI"); + } QDBusConnection con("peer"); QVERIFY(con.isConnected()); diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index ed5b9fabb6..779783d5ec 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -303,6 +303,8 @@ private slots: void blendNullRGB32(); void toRGB64(); + void fillPolygon(); + private: void fillData(); void setPenColor(QPainter& p); @@ -5144,6 +5146,112 @@ void tst_QPainter::toRGB64() } } +void tst_QPainter::fillPolygon() +{ + QImage image(50, 50, QImage::Format_RGB32); + image.fill(Qt::white); + + QPainter painter(&image); + QBrush brush(Qt::black, Qt::SolidPattern); + painter.setBrush(brush); + + QPen pen(Qt::red, 0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); + painter.setPen(pen); + + const QPoint diamondpoints[5] = { + QPoint(-15, 0), + QPoint(0, -15), + QPoint(15, 0), + QPoint(0, 15), + QPoint(-15, 0) + }; + enum { Outside1, Border1, Inside, Border2, Outside2 } state; + + for (int i = 0; i < 16 ; i++) + { + for (int j = 0; j < 16 ; j++) + { + image.fill(Qt::white); + painter.resetTransform(); + painter.translate(25 + i/16., 25 + j/16.); + painter.drawPolygon(diamondpoints, 5); + + for (int x = 0; x < 50; x++) { + state = Outside1; + for (int y = 0; y < 50; y++) { + QRgb c = image.pixel(x, y); + switch (state) { + case Outside1: + if (c == QColor(Qt::red).rgb()) + state = Border1; + else + QCOMPARE(c, QColor(Qt::white).rgb()); + break; + case Border1: + if (c == QColor(Qt::black).rgb()) + state = Inside; + else if (c == QColor(Qt::white).rgb()) + state = Outside2; + else + QCOMPARE(c, QColor(Qt::red).rgb()); + break; + case Inside: + if (c == QColor(Qt::red).rgb()) + state = Border2; + else + QCOMPARE(c, QColor(Qt::black).rgb()); + break; + case Border2: + if (c == QColor(Qt::white).rgb()) + state = Outside2; + else + QCOMPARE(c, QColor(Qt::red).rgb()); + break; + case Outside2: + QCOMPARE(c, QColor(Qt::white).rgb()); + } + } + } + for (int y = 0; y < 50; y++) { + state = Outside1; + for (int x = 0; x < 50; x++) { + QRgb c = image.pixel(x, y); + switch (state) { + case Outside1: + if (c == QColor(Qt::red).rgb()) + state = Border1; + else + QCOMPARE(c, QColor(Qt::white).rgb()); + break; + case Border1: + if (c == QColor(Qt::black).rgb()) + state = Inside; + else if (c == QColor(Qt::white).rgb()) + state = Outside2; + else + QCOMPARE(c, QColor(Qt::red).rgb()); + break; + case Inside: + if (c == QColor(Qt::red).rgb()) + state = Border2; + else + QCOMPARE(c, QColor(Qt::black).rgb()); + break; + case Border2: + if (c == QColor(Qt::white).rgb()) + state = Outside2; + else + QCOMPARE(c, QColor(Qt::red).rgb()); + break; + case Outside2: + QCOMPARE(c, QColor(Qt::white).rgb()); + } + } + } + } + } +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index a89f8f3c8a..b9785c35ac 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -60,6 +60,10 @@ static inline HWND getHWNDForWidget(const QWidget *widget) } #endif // Q_OS_WIN +Q_DECLARE_METATYPE(QAbstractItemView::ScrollMode) +Q_DECLARE_METATYPE(QMargins) +Q_DECLARE_METATYPE(QSize) + // Make a widget frameless to prevent size constraints of title bars // from interfering (Windows). static inline void setFrameless(QWidget *w) @@ -902,10 +906,11 @@ class PublicListView : public QListView class TestDelegate : public QItemDelegate { public: - TestDelegate(QObject *parent) : QItemDelegate(parent), m_sizeHint(50,50) {} + explicit TestDelegate(QObject *parent, const QSize &sizeHint = QSize(50,50)) + : QItemDelegate(parent), m_sizeHint(sizeHint) {} QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return m_sizeHint; } - QSize m_sizeHint; + const QSize m_sizeHint; }; typedef QList<int> IntList; @@ -1250,9 +1255,7 @@ void tst_QListView::scrollBarRanges() lv.setModel(&model); lv.resize(250, 130); - TestDelegate *delegate = new TestDelegate(&lv); - delegate->m_sizeHint = QSize(100, rowHeight); - lv.setItemDelegate(delegate); + lv.setItemDelegate(new TestDelegate(&lv, QSize(100, rowHeight))); topLevel.show(); for (int h = 30; h <= 210; ++h) { @@ -1268,14 +1271,18 @@ void tst_QListView::scrollBarAsNeeded_data() { QTest::addColumn<QSize>("size"); QTest::addColumn<int>("itemCount"); + QTest::addColumn<QAbstractItemView::ScrollMode>("verticalScrollMode"); + QTest::addColumn<QMargins>("viewportMargins"); + QTest::addColumn<QSize>("delegateSize"); QTest::addColumn<int>("flow"); QTest::addColumn<bool>("horizontalScrollBarVisible"); QTest::addColumn<bool>("verticalScrollBarVisible"); - QTest::newRow("TopToBottom, count:0") << QSize(200, 100) << 0 + << QListView::ScrollPerItem + << QMargins() << QSize() << int(QListView::TopToBottom) << false << false; @@ -1283,6 +1290,8 @@ void tst_QListView::scrollBarAsNeeded_data() QTest::newRow("TopToBottom, count:1") << QSize(200, 100) << 1 + << QListView::ScrollPerItem + << QMargins() << QSize() << int(QListView::TopToBottom) << false << false; @@ -1290,13 +1299,46 @@ void tst_QListView::scrollBarAsNeeded_data() QTest::newRow("TopToBottom, count:20") << QSize(200, 100) << 20 + << QListView::ScrollPerItem + << QMargins() << QSize() + << int(QListView::TopToBottom) + << false + << true; + + QTest::newRow("TopToBottom, fixed size, count:4") + << QSize(200, 200) + << 4 + << QListView::ScrollPerPixel + << QMargins() << QSize(40, 40) + << int(QListView::TopToBottom) + << false + << false; + + // QTBUG-61383, vertical case: take viewport margins into account + QTest::newRow("TopToBottom, fixed size, vertical margins, count:4") + << QSize(200, 200) + << 4 + << QListView::ScrollPerPixel + << QMargins(0, 50, 0, 50) << QSize(40, 40) << int(QListView::TopToBottom) << false << true; + // QTBUG-61383, horizontal case: take viewport margins into account + QTest::newRow("TopToBottom, fixed size, horizontal margins, count:4") + << QSize(200, 200) + << 4 + << QListView::ScrollPerPixel + << QMargins(50, 0, 50, 0) << QSize(120, 40) + << int(QListView::TopToBottom) + << true + << false; + QTest::newRow("LeftToRight, count:0") << QSize(200, 100) << 0 + << QListView::ScrollPerItem + << QMargins() << QSize() << int(QListView::LeftToRight) << false << false; @@ -1304,6 +1346,8 @@ void tst_QListView::scrollBarAsNeeded_data() QTest::newRow("LeftToRight, count:1") << QSize(200, 100) << 1 + << QListView::ScrollPerItem + << QMargins() << QSize() << int(QListView::LeftToRight) << false << false; @@ -1311,17 +1355,31 @@ void tst_QListView::scrollBarAsNeeded_data() QTest::newRow("LeftToRight, count:20") << QSize(200, 100) << 20 + << QListView::ScrollPerItem + << QMargins() << QSize() << int(QListView::LeftToRight) << true << false; } + +class ScrollBarTestListView : public QListView +{ + public: + explicit ScrollBarTestListView(QWidget *p) : QListView(p) {} + + using QAbstractScrollArea::setViewportMargins; +}; + void tst_QListView::scrollBarAsNeeded() { QFETCH(QSize, size); QFETCH(int, itemCount); + QFETCH(QAbstractItemView::ScrollMode, verticalScrollMode); + QFETCH(QMargins, viewportMargins); + QFETCH(QSize, delegateSize); QFETCH(int, flow); QFETCH(bool, horizontalScrollBarVisible); QFETCH(bool, verticalScrollBarVisible); @@ -1330,10 +1388,17 @@ void tst_QListView::scrollBarAsNeeded() const int rowCounts[3] = {0, 1, 20}; QWidget topLevel; - QListView lv(&topLevel); + topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()) + QStringLiteral("::") + + QLatin1String(QTest::currentDataTag())); + ScrollBarTestListView lv(&topLevel); lv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); lv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + lv.setVerticalScrollMode(verticalScrollMode); + lv.setViewportMargins(viewportMargins); lv.setFlow((QListView::Flow)flow); + if (!delegateSize.isEmpty()) + lv.setItemDelegate(new TestDelegate(&lv, delegateSize)); + QStringListModel model(&lv); lv.setModel(&model); lv.resize(size); @@ -2380,9 +2445,7 @@ void tst_QListView::horizontalScrollingByVerticalWheelEvents() QListView lv; lv.setWrapping(true); - TestDelegate *delegate = new TestDelegate(&lv); - delegate->m_sizeHint = QSize(100, 100); - lv.setItemDelegate(delegate); + lv.setItemDelegate(new TestDelegate(&lv, QSize(100, 100))); QtTestModel model; model.colCount = 1; diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index a0ba91ba4a..3f7fdd6f6f 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -3106,7 +3106,6 @@ void tst_QLineEdit::inputMaskAndValidator() void tst_QLineEdit::maxLengthAndInputMask() { - // Really a test for #30447 QLineEdit *testWidget = ensureTestWidget(); QVERIFY(testWidget->inputMask().isNull()); testWidget->setMaxLength(10); @@ -3114,6 +3113,16 @@ void tst_QLineEdit::maxLengthAndInputMask() testWidget->setInputMask(QString()); QVERIFY(testWidget->inputMask().isNull()); QCOMPARE(testWidget->maxLength(), 10); + + testWidget->setInputMask("XXXX"); + QCOMPARE(testWidget->maxLength(), 4); + + testWidget->setMaxLength(15); + QCOMPARE(testWidget->maxLength(), 4); + + // 8 \ => raw string with 4 \ => input mask with 2 \ => maxLength = 2 + testWidget->setInputMask("\\\\\\\\"); + QCOMPARE(testWidget->maxLength(), 2); } diff --git a/tests/manual/qtabbar/main.cpp b/tests/manual/qtabbar/main.cpp index 5a1a558c10..466a7e20fc 100644 --- a/tests/manual/qtabbar/main.cpp +++ b/tests/manual/qtabbar/main.cpp @@ -57,19 +57,25 @@ #include <QDesktopWidget> #include <QTabWidget> #include <QProxyStyle> +#include <qdebug.h> +#include "tabbarform.h" -class MyProxyStyle : public QProxyStyle +class TabBarProxyStyle : public QProxyStyle { public: + TabBarProxyStyle() : QProxyStyle(), alignment(Qt::AlignLeft) + { } + int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const { if (hint == QStyle::SH_TabBar_Alignment) - return Qt::AlignLeft; -// return Qt::AlignRight; -// return Qt::AlignCenter; + return alignment; + return QProxyStyle::styleHint(hint, option, widget, returnData); } + + Qt::Alignment alignment; }; const int TabCount = 5; @@ -77,7 +83,8 @@ const int TabCount = 5; int main(int argc, char *argv[]) { QApplication app(argc, argv); - app.setStyle(new MyProxyStyle); + auto *proxyStyle = new TabBarProxyStyle; + app.setStyle(proxyStyle); QWidget widget; QStackedWidget stackedWidget; @@ -161,8 +168,61 @@ int main(int argc, char *argv[]) break; } - layout->setMargin(0); - widget.resize(QApplication::desktop()->screenGeometry(&widget).size() * 0.5); + TabBarForm form; + layout->addWidget(&form); + layout->setAlignment(&form, Qt::AlignHCenter); + + form.ui->documentModeButton->setChecked(tabBar.documentMode()); + QObject::connect(form.ui->documentModeButton, &QCheckBox::toggled, [&] { + tabBar.setDocumentMode(form.ui->documentModeButton->isChecked()); + // QMacStyle (and maybe other styles) requires a re-polish to get the right font + QApplication::sendEvent(&tabBar, new QEvent(QEvent::ThemeChange)); + }); + + form.ui->movableTabsButton->setChecked(tabBar.isMovable()); + QObject::connect(form.ui->movableTabsButton, &QCheckBox::toggled, [&] { + tabBar.setMovable(form.ui->movableTabsButton->isChecked()); + tabBar.update(); + }); + + form.ui->closableTabsButton->setChecked(tabBar.tabsClosable()); + QObject::connect(form.ui->closableTabsButton, &QCheckBox::toggled, [&] { + tabBar.setTabsClosable(form.ui->closableTabsButton->isChecked()); + tabBar.update(); + }); + + form.ui->expandingTabsButton->setChecked(tabBar.expanding()); + QObject::connect(form.ui->expandingTabsButton, &QCheckBox::toggled, [&] { + tabBar.setExpanding(form.ui->expandingTabsButton->isChecked()); + tabBar.update(); + }); + + form.ui->displayIconButton->setChecked(!tabBar.tabIcon(0).isNull()); + QObject::connect(form.ui->displayIconButton, &QCheckBox::toggled, [&] { + const auto icon = form.ui->displayIconButton->isChecked() ? + tabBar.style()->standardIcon(QStyle::SP_ComputerIcon) : QIcon(); + for (int i = 0; i < tabBar.count(); i++) + tabBar.setTabIcon(i, icon); + }); + + QObject::connect(form.ui->shapeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [&](int index) { + Q_UNUSED(index); + // TODO + }); + + if (proxyStyle->alignment == Qt::AlignLeft) + form.ui->leftAlignedButton->setChecked(true); + else if (proxyStyle->alignment == Qt::AlignRight) + form.ui->rightAlignedButton->setChecked(true); + else + form.ui->centeredButton->setChecked(true); + QObject::connect(form.ui->textAlignmentGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [&](QAbstractButton *b) { + proxyStyle->alignment = b == form.ui->leftAlignedButton ? Qt::AlignLeft : + b == form.ui->rightAlignedButton ? Qt::AlignRight : Qt::AlignCenter; + QApplication::sendEvent(&tabBar, new QEvent(QEvent::StyleChange)); + }); + + layout->setMargin(12); widget.show(); return app.exec(); diff --git a/tests/manual/qtabbar/qtabbar.pro b/tests/manual/qtabbar/qtabbar.pro index a63da72158..867e06735e 100644 --- a/tests/manual/qtabbar/qtabbar.pro +++ b/tests/manual/qtabbar/qtabbar.pro @@ -1,4 +1,6 @@ TARGET = qtabbar TEMPLATE = app QT = core gui widgets -SOURCES = main.cpp +SOURCES = main.cpp tabbarform.cpp +HEADERS = tabbarform.h +FORMS = tabbarform.ui diff --git a/tests/manual/qtabbar/tabbarform.cpp b/tests/manual/qtabbar/tabbarform.cpp new file mode 100644 index 0000000000..51271f7373 --- /dev/null +++ b/tests/manual/qtabbar/tabbarform.cpp @@ -0,0 +1,13 @@ +#include "tabbarform.h" + +TabBarForm::TabBarForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TabBarForm) +{ + ui->setupUi(this); +} + +TabBarForm::~TabBarForm() +{ + delete ui; +} diff --git a/tests/manual/qtabbar/tabbarform.h b/tests/manual/qtabbar/tabbarform.h new file mode 100644 index 0000000000..7db3f71fa5 --- /dev/null +++ b/tests/manual/qtabbar/tabbarform.h @@ -0,0 +1,22 @@ +#ifndef TABBARFORM_H +#define TABBARFORM_H + +#include <QWidget> +#include "ui_tabbarform.h" + +namespace Ui { +class TabBarForm; +} + +class TabBarForm : public QWidget +{ + Q_OBJECT + +public: + explicit TabBarForm(QWidget *parent = 0); + ~TabBarForm(); + + Ui::TabBarForm *ui; +}; + +#endif // TABBARFORM_H diff --git a/tests/manual/qtabbar/tabbarform.ui b/tests/manual/qtabbar/tabbarform.ui new file mode 100644 index 0000000000..17100b3b62 --- /dev/null +++ b/tests/manual/qtabbar/tabbarform.ui @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>TabBarForm</class> + <widget class="QWidget" name="TabBarForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>308</width> + <height>260</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <layout class="QGridLayout" name="gridLayout"> + <item row="10" column="1"> + <widget class="QRadioButton" name="rightAlignedButton"> + <property name="text"> + <string>Right aligned</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">textAlignmentGroup</string> + </attribute> + </widget> + </item> + <item row="8" column="1"> + <widget class="QRadioButton" name="leftAlignedButton"> + <property name="text"> + <string>Left aligned</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">textAlignmentGroup</string> + </attribute> + </widget> + </item> + <item row="2" column="1"> + <widget class="QCheckBox" name="closableTabsButton"> + <property name="text"> + <string>Closable tabs</string> + </property> + </widget> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Tabs alignment:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QCheckBox" name="movableTabsButton"> + <property name="text"> + <string>Movable tabs</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QCheckBox" name="documentModeButton"> + <property name="text"> + <string>Document mode</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QCheckBox" name="expandingTabsButton"> + <property name="text"> + <string>Expanding</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QComboBox" name="shapeComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>North</string> + </property> + </item> + <item> + <property name="text"> + <string>South</string> + </property> + </item> + <item> + <property name="text"> + <string>West</string> + </property> + </item> + <item> + <property name="text"> + <string>East</string> + </property> + </item> + </widget> + </item> + <item row="7" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>12</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>12</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Tab bar options:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="9" column="1"> + <widget class="QRadioButton" name="centeredButton"> + <property name="text"> + <string>Centered</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">textAlignmentGroup</string> + </attribute> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Tab shape (TODO):</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QCheckBox" name="displayIconButton"> + <property name="text"> + <string>Display icon</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> + <buttongroups> + <buttongroup name="textAlignmentGroup"/> + </buttongroups> +</ui> |