summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier BESSON <[email protected]>2025-07-05 10:36:41 +0200
committerXavier BESSON <[email protected]>2025-07-29 17:36:34 +0200
commit71c0d8d47240f6c0f58c0047e2f15cdbda732e03 (patch)
treeb10f5657037f5c05d1beedfc6a3048f74f32f194
parente1125c4965743611960681ada345005c83cfc070 (diff)
Add previewColumnVisible property in QColumnView
Make it possible to have a QColumnView without a preview widget. Fixes: QTBUG-1826 Change-Id: Id169540224150a2fe804f61f90ee9bf2aabeb9ff Reviewed-by: Axel Spoerl <[email protected]>
-rw-r--r--src/widgets/itemviews/qcolumnview.cpp69
-rw-r--r--src/widgets/itemviews/qcolumnview.h3
-rw-r--r--src/widgets/itemviews/qcolumnview_p.h5
-rw-r--r--tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp12
4 files changed, 73 insertions, 16 deletions
diff --git a/src/widgets/itemviews/qcolumnview.cpp b/src/widgets/itemviews/qcolumnview.cpp
index 7dd724a6ed3..4c703f0c033 100644
--- a/src/widgets/itemviews/qcolumnview.cpp
+++ b/src/widgets/itemviews/qcolumnview.cpp
@@ -138,6 +138,29 @@ bool QColumnView::resizeGripsVisible() const
}
/*!
+ \property QColumnView::previewColumnVisible
+ \brief whether the preview column is visible
+ \since 6.11
+
+ By default, \c visible is set to true
+*/
+void QColumnView::setPreviewColumnVisible(bool visible)
+{
+ Q_D(QColumnView);
+ if (d->showPreviewColumn == visible)
+ return;
+ d->showPreviewColumn = visible;
+ if (d->columns.constLast() == d->previewColumn)
+ d->columns.constLast()->setVisible(d->showPreviewColumn);
+}
+
+bool QColumnView::previewColumnVisible() const
+{
+ Q_D(const QColumnView);
+ return d->showPreviewColumn;
+}
+
+/*!
\reimp
*/
void QColumnView::setModel(QAbstractItemModel *model)
@@ -669,9 +692,10 @@ QAbstractItemView *QColumnViewPrivate::createColumn(const QModelIndex &index, bo
this, &QColumnViewPrivate::clicked);
} else {
if (!previewColumn)
- setPreviewWidget(new QWidget(q));
+ previewColumn = createPreviewColumn();
view = previewColumn;
- view->setMinimumWidth(qMax(view->minimumWidth(), previewWidget->minimumWidth()));
+ if (previewWidget)
+ view->setMinimumWidth(qMax(view->minimumWidth(), previewWidget->minimumWidth()));
}
viewConnections[view] = {
@@ -714,8 +738,10 @@ QAbstractItemView *QColumnViewPrivate::createColumn(const QModelIndex &index, bo
columns.append(view);
doLayout();
updateScrollbars();
- if (show && view->isHidden())
+ if (show && view->isHidden() && view != previewColumn)
view->setVisible(true);
+ if (view == previewColumn)
+ view->setVisible(showPreviewColumn);
return view;
}
@@ -827,6 +853,19 @@ void QColumnView::setPreviewWidget(QWidget *widget)
*/
void QColumnViewPrivate::setPreviewWidget(QWidget *widget)
{
+ QColumnViewPreviewColumn *column = createPreviewColumn();
+ previewColumn = column;
+ column->setPreviewWidget(widget);
+ previewWidget = widget;
+ if (previewWidget)
+ previewWidget->setParent(column->viewport());
+}
+
+/*!
+ \internal
+*/
+QColumnViewPreviewColumn *QColumnViewPrivate::createPreviewColumn()
+{
Q_Q(QColumnView);
if (previewColumn) {
if (!columns.isEmpty() && columns.constLast() == previewColumn)
@@ -834,16 +873,14 @@ void QColumnViewPrivate::setPreviewWidget(QWidget *widget)
previewColumn->deleteLater();
}
QColumnViewPreviewColumn *column = new QColumnViewPreviewColumn(q);
- column->setPreviewWidget(widget);
- previewColumn = column;
- previewColumn->hide();
- previewColumn->setFrameShape(QFrame::NoFrame);
- previewColumn->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
- previewColumn->setSelectionMode(QAbstractItemView::NoSelection);
- previewColumn->setMinimumWidth(qMax(previewColumn->verticalScrollBar()->width(),
- previewColumn->minimumWidth()));
- previewWidget = widget;
- previewWidget->setParent(previewColumn->viewport());
+ column->hide();
+ column->setFrameShape(QFrame::NoFrame);
+ column->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ column->setSelectionMode(QAbstractItemView::NoSelection);
+ column->setMinimumWidth(qMax(column->verticalScrollBar()->width(),
+ column->minimumWidth()));
+ column->setPreviewWidget(nullptr);
+ return column;
}
/*!
@@ -998,7 +1035,10 @@ void QColumnViewPrivate::changeCurrentColumn()
}
if (columns.constLast()->isHidden()) {
- columns.constLast()->setVisible(true);
+ if (columns.constLast() != previewColumn)
+ columns.constLast()->setVisible(true);
+ else
+ columns.constLast()->setVisible(showPreviewColumn);
}
if (columns.constLast()->selectionModel())
columns.constLast()->selectionModel()->clear();
@@ -1040,6 +1080,7 @@ void QColumnView::selectAll()
QColumnViewPrivate::QColumnViewPrivate()
: QAbstractItemViewPrivate()
,showResizeGrips(true)
+,showPreviewColumn(true)
,offset(0)
,previewWidget(nullptr)
,previewColumn(nullptr)
diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h
index c0c1398692a..17e34dbbf93 100644
--- a/src/widgets/itemviews/qcolumnview.h
+++ b/src/widgets/itemviews/qcolumnview.h
@@ -17,6 +17,7 @@ class Q_WIDGETS_EXPORT QColumnView : public QAbstractItemView {
Q_OBJECT
Q_PROPERTY(bool resizeGripsVisible READ resizeGripsVisible WRITE setResizeGripsVisible)
+ Q_PROPERTY(bool previewColumnVisible READ previewColumnVisible WRITE setPreviewColumnVisible)
Q_SIGNALS:
void updatePreviewWidget(const QModelIndex &index);
@@ -38,6 +39,8 @@ public:
// QColumnView functions
void setResizeGripsVisible(bool visible);
bool resizeGripsVisible() const;
+ void setPreviewColumnVisible(bool visible);
+ bool previewColumnVisible() const;
QWidget *previewWidget() const;
void setPreviewWidget(QWidget *widget);
diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h
index f9b2f3baa40..ee0925a2c2f 100644
--- a/src/widgets/itemviews/qcolumnview_p.h
+++ b/src/widgets/itemviews/qcolumnview_p.h
@@ -45,7 +45,8 @@ public:
void setPreviewWidget(QWidget *widget) {
previewWidget = widget;
- setMinimumWidth(previewWidget->minimumWidth());
+ if (previewWidget)
+ setMinimumWidth(previewWidget->minimumWidth());
}
void resizeEvent(QResizeEvent * event) override{
@@ -127,6 +128,7 @@ public:
void disconnectView(QAbstractItemView *view);
void doLayout();
void setPreviewWidget(QWidget *widget);
+ QColumnViewPreviewColumn *createPreviewColumn();
void checkColumnCreation(const QModelIndex &parent);
@@ -138,6 +140,7 @@ public:
QList<QAbstractItemView*> columns;
QList<int> columnSizes; // used during init and corner moving
bool showResizeGrips;
+ bool showPreviewColumn;
int offset;
#if QT_CONFIG(animation)
QPropertyAnimation currentAnimation;
diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp
index 1ff9973e004..4b268d05c4b 100644
--- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp
+++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp
@@ -718,6 +718,8 @@ void tst_QColumnView::gripMoved()
void tst_QColumnView::preview()
{
QColumnView view;
+ view.resize(800, 300);
+ view.show();
QCOMPARE(view.previewWidget(), nullptr);
TreeModel model;
view.setModel(&model);
@@ -738,18 +740,26 @@ void tst_QColumnView::preview()
}
QVERIFY(file.isValid());
view.setCurrentIndex(file);
- QVERIFY(view.previewWidget() != nullptr);
+ QCOMPARE(view.previewWidget(), nullptr);
QWidget *previewWidget = new QWidget(&view);
view.setPreviewWidget(previewWidget);
QCOMPARE(view.previewWidget(), previewWidget);
QVERIFY(previewWidget->parent() != &view);
+ QTRY_VERIFY(view.previewWidget()->isVisible());
+ view.setPreviewColumnVisible(false);
+ QTRY_VERIFY(!view.previewWidget()->isVisible());
+ view.setPreviewColumnVisible(true);
+ QTRY_VERIFY(view.previewWidget()->isVisible());
view.setCurrentIndex(home);
+ QTRY_VERIFY(!view.previewWidget()->isVisible());
// previewWidget should be marked for deletion
QWidget *previewWidget2 = new QWidget(&view);
view.setPreviewWidget(previewWidget2);
QCOMPARE(view.previewWidget(), previewWidget2);
+ view.setPreviewWidget(nullptr);
+ QCOMPARE(view.previewWidget(), nullptr);
}
void tst_QColumnView::swapPreview()