diff options
| author | Xavier BESSON <[email protected]> | 2025-07-05 10:36:41 +0200 |
|---|---|---|
| committer | Xavier BESSON <[email protected]> | 2025-07-29 17:36:34 +0200 |
| commit | 71c0d8d47240f6c0f58c0047e2f15cdbda732e03 (patch) | |
| tree | b10f5657037f5c05d1beedfc6a3048f74f32f194 | |
| parent | e1125c4965743611960681ada345005c83cfc070 (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.cpp | 69 | ||||
| -rw-r--r-- | src/widgets/itemviews/qcolumnview.h | 3 | ||||
| -rw-r--r-- | src/widgets/itemviews/qcolumnview_p.h | 5 | ||||
| -rw-r--r-- | tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp | 12 |
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() |
