diff options
-rw-r--r-- | src/widgets/itemviews/qheaderview.cpp | 10 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview.h | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview_p.h | 6 | ||||
-rw-r--r-- | src/widgets/itemviews/qtableview.cpp | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 2 | ||||
-rw-r--r-- | tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp | 4 | ||||
-rw-r--r-- | tests/manual/widgets/itemviews/qtreeview/main.cpp | 55 | ||||
-rw-r--r-- | tests/manual/widgets/itemviews/qtreeview/qtreeviewtest.pro | 4 |
8 files changed, 84 insertions, 3 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 541d40d421..fa774b5074 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2268,7 +2268,12 @@ void QHeaderView::mousePressEvent(QMouseEvent *e) d->pressed = logicalIndexAt(pos); if (d->clickableSections) emit sectionPressed(d->pressed); - if (d->movableSections) { + + bool acceptMoveSection = d->movableSections; + if (acceptMoveSection && d->pressed == 0 && !d->allowUserMoveOfSection0) + acceptMoveSection = false; // Do not allow moving the tree nod + + if (acceptMoveSection) { d->section = d->target = d->pressed; if (d->section == -1) return; @@ -2332,6 +2337,9 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e) int visual = visualIndexAt(pos); if (visual == -1) return; + if (visual == 0 && logicalIndex(0) == 0 && !d->allowUserMoveOfSection0) + return; + int posThreshold = d->headerSectionPosition(visual) - d->offset + d->headerSectionSize(visual) / 2; int moving = visualIndex(d->section); if (visual < moving) { diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h index 1054e10ba1..847758aa12 100644 --- a/src/widgets/itemviews/qheaderview.h +++ b/src/widgets/itemviews/qheaderview.h @@ -240,6 +240,9 @@ protected: QRegion visualRegionForSelection(const QItemSelection &selection) const; void initStyleOption(QStyleOptionHeader *option) const; + friend class QTableView; + friend class QTreeView; + private: Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)) Q_PRIVATE_SLOT(d_func(), void _q_layoutAboutToBeChanged()) diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 4d9d0b8c93..7dcfcad01b 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -91,6 +91,7 @@ public: stretchLastSection(false), cascadingResizing(false), resizeRecursionBlock(false), + allowUserMoveOfSection0(true), // will be false for QTreeView and true for QTableView stretchSections(0), contentsSections(0), minimumSectionSize(-1), @@ -234,6 +235,10 @@ public: } } + inline void setAllowUserMoveOfSection0(bool b) { + allowUserMoveOfSection0 = b; + } + void clear(); void flipSortIndicator(int section); void cascadingResize(int visual, int newSize); @@ -274,6 +279,7 @@ public: bool stretchLastSection; bool cascadingResizing; bool resizeRecursionBlock; + bool allowUserMoveOfSection0; int stretchSections; int contentsSections; int defaultSectionSize; diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index d84dc608b9..32869ad292 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -53,6 +53,7 @@ #include <qscrollbar.h> #include <qabstractbutton.h> #include <private/qtableview_p.h> +#include <private/qheaderview_p.h> #ifndef QT_NO_ACCESSIBILITY #include <qaccessible.h> #endif @@ -1181,6 +1182,7 @@ void QTableView::setHorizontalHeader(QHeaderView *header) delete d->horizontalHeader; d->horizontalHeader = header; d->horizontalHeader->setParent(this); + d->horizontalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->horizontalHeader->model()) { d->horizontalHeader->setModel(d->model); if (d->selectionModel) @@ -1218,6 +1220,7 @@ void QTableView::setVerticalHeader(QHeaderView *header) delete d->verticalHeader; d->verticalHeader = header; d->verticalHeader->setParent(this); + d->verticalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->verticalHeader->model()) { d->verticalHeader->setModel(d->model); if (d->selectionModel) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index bcaf8dc2c3..cf3d7155c1 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -58,6 +58,7 @@ #endif #include <private/qtreeview_p.h> +#include <private/qheaderview_p.h> QT_BEGIN_NAMESPACE @@ -313,6 +314,7 @@ void QTreeView::setHeader(QHeaderView *header) delete d->header; d->header = header; d->header->setParent(this); + d->header->d_func()->setAllowUserMoveOfSection0(false); if (!d->header->model()) { d->header->setModel(d->model); diff --git a/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp b/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp index 498042c117..5a1db1383f 100644 --- a/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp +++ b/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp @@ -101,9 +101,9 @@ int main(int argc, char *argv[]) m.setColumnCount(36); tv.setModel(&m); SomeHandler handler(tv.horizontalHeader(), &tv); - tv.horizontalHeader()->setDefaultSectionSize(200); + tv.horizontalHeader()->setDefaultSectionSize(50); + tv.horizontalHeader()->setSectionsMovable(true); tv.showMaximized(); - tv.horizontalScrollBar()->setValue(tv.horizontalScrollBar()->maximum()); app.exec(); } diff --git a/tests/manual/widgets/itemviews/qtreeview/main.cpp b/tests/manual/widgets/itemviews/qtreeview/main.cpp new file mode 100644 index 0000000000..0cb77da9b2 --- /dev/null +++ b/tests/manual/widgets/itemviews/qtreeview/main.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtWidgets/QFileSystemModel> +#include <QtWidgets/QtWidgets> + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QFileSystemModel *model = new QFileSystemModel; + model->setRootPath(QDir::currentPath()); + QTreeView *tree = new QTreeView(); + tree->setModel(model); + tree->show(); + app.exec(); +} diff --git a/tests/manual/widgets/itemviews/qtreeview/qtreeviewtest.pro b/tests/manual/widgets/itemviews/qtreeview/qtreeviewtest.pro new file mode 100644 index 0000000000..c241ee1045 --- /dev/null +++ b/tests/manual/widgets/itemviews/qtreeview/qtreeviewtest.pro @@ -0,0 +1,4 @@ +TEMPLATE = app +SOURCES = main.cpp +QT += widgets +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 |