diff options
author | Zhang Hao <zhanghao@uniontech.com> | 2021-06-08 09:43:38 +0800 |
---|---|---|
committer | Zhang Hao <zhanghao@uniontech.com> | 2021-06-10 14:02:11 +0000 |
commit | 0242be90606b377864c6fd02d5a8e0afaf635acf (patch) | |
tree | 433f04f8a5951f15335f65db3233920c1808af74 /tests/auto/widgets/itemviews | |
parent | 4e901a2f99cbfda3b479253ea54b16f02e1c3aa5 (diff) |
Check scrollbar ScrollBarOverlap when computing QListView margins
When the listview setWordWrap is true and ScrollBarPolicy is
ScrollBarAsNeeded, if QStyle::PM_ScrollView_ScrollBarOverlap
returns true, the text displayed an empty line.
Fix this by not reserving the width of the vertical scrollbar
if the flow is TopToBottom and the vertical scrollbar, and QStyle
returns true for PM_ScrollView_ScrollBarOverlap. Amends
aeef92c3c33e4ebcb7e5d8dd955020f4f4600e84
Pick-to: 6.1 6.2
Fixes: QTBUG-94248
Done-with: Volker Hilsheimer <volker.hilsheimer@qt.io>
Change-Id: I4d47c7e86bbb86474cb1a99bb26d8b67f0e8a7e2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/widgets/itemviews')
-rw-r--r-- | tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index a2c44334fe..38c34aab76 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -37,6 +37,7 @@ #include <QTest> #include <QTimer> #include <QtMath> +#include <QProxyStyle> #include <QtTest/private/qtesthelpers_p.h> #include <QtWidgets/private/qlistview_p.h> @@ -170,6 +171,7 @@ private slots: void itemAlignment(); void internalDragDropMove_data(); void internalDragDropMove(); + void spacingWithWordWrap_data(); void spacingWithWordWrap(); }; @@ -2768,8 +2770,37 @@ void tst_QListView::internalDragDropMove() /*! Verify fix for QTBUG-92366 */ +void tst_QListView::spacingWithWordWrap_data() +{ + QTest::addColumn<bool>("scrollBarOverlap"); + + QTest::addRow("Without overlap") << false; + QTest::addRow("With overlap") << true; +} + void tst_QListView::spacingWithWordWrap() { + QFETCH(bool, scrollBarOverlap); + + class MyStyle : public QProxyStyle + { + bool scrollBarOverlap; + public: + MyStyle(bool scrollBarOverlap) : scrollBarOverlap(scrollBarOverlap) {} + + int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override{ + switch (metric) { + case QStyle::PM_ScrollView_ScrollBarOverlap: return scrollBarOverlap; + default: + break; + } + return QProxyStyle::pixelMetric(metric, option, widget); + } + }; + + QApplication::setStyle(new MyStyle(scrollBarOverlap)); + const int listViewResizeCount = 200; QWidget window; window.resize(300, 200); |