mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2024-11-27 14:38:28 +08:00
73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
|
// Copyright (C) 2016 The Qt Company Ltd.
|
||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||
|
|
||
|
//! [quoting modelview_a]
|
||
|
#include "mainwindow.h"
|
||
|
|
||
|
#include <QTreeView>
|
||
|
#include <QStandardItemModel>
|
||
|
#include <QItemSelectionModel>
|
||
|
|
||
|
MainWindow::MainWindow(QWidget *parent)
|
||
|
: QMainWindow(parent)
|
||
|
, treeView(new QTreeView(this))
|
||
|
, standardModel(new QStandardItemModel(this))
|
||
|
{
|
||
|
setCentralWidget(treeView);
|
||
|
auto *rootNode = standardModel->invisibleRootItem();
|
||
|
|
||
|
|
||
|
// defining a couple of items
|
||
|
auto *americaItem = new QStandardItem("America");
|
||
|
auto *mexicoItem = new QStandardItem("Canada");
|
||
|
auto *usaItem = new QStandardItem("USA");
|
||
|
auto *bostonItem = new QStandardItem("Boston");
|
||
|
auto *europeItem = new QStandardItem("Europe");
|
||
|
auto *italyItem = new QStandardItem("Italy");
|
||
|
auto *romeItem = new QStandardItem("Rome");
|
||
|
auto *veronaItem = new QStandardItem("Verona");
|
||
|
|
||
|
// building up the hierarchy
|
||
|
rootNode-> appendRow(americaItem);
|
||
|
rootNode-> appendRow(europeItem);
|
||
|
americaItem-> appendRow(mexicoItem);
|
||
|
americaItem-> appendRow(usaItem);
|
||
|
usaItem-> appendRow(bostonItem);
|
||
|
europeItem-> appendRow(italyItem);
|
||
|
italyItem-> appendRow(romeItem);
|
||
|
italyItem-> appendRow(veronaItem);
|
||
|
|
||
|
// register the model
|
||
|
treeView->setModel(standardModel);
|
||
|
treeView->expandAll();
|
||
|
|
||
|
// selection changes shall trigger a slot
|
||
|
QItemSelectionModel *selectionModel = treeView->selectionModel();
|
||
|
connect(selectionModel, &QItemSelectionModel::selectionChanged,
|
||
|
this, &MainWindow::selectionChangedSlot);
|
||
|
}
|
||
|
//! [quoting modelview_a]
|
||
|
|
||
|
//------------------------------------------------------------------------------------
|
||
|
|
||
|
//! [quoting modelview_b]
|
||
|
void MainWindow::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
|
||
|
{
|
||
|
// get the text of the selected item
|
||
|
const QModelIndex index = treeView->selectionModel()->currentIndex();
|
||
|
QString selectedText = index.data(Qt::DisplayRole).toString();
|
||
|
// find out the hierarchy level of the selected item
|
||
|
int hierarchyLevel = 1;
|
||
|
QModelIndex seekRoot = index;
|
||
|
while (seekRoot.parent().isValid()) {
|
||
|
seekRoot = seekRoot.parent();
|
||
|
hierarchyLevel++;
|
||
|
}
|
||
|
QString showString = QString("%1, Level %2").arg(selectedText)
|
||
|
.arg(hierarchyLevel);
|
||
|
setWindowTitle(showString);
|
||
|
}
|
||
|
//! [quoting modelview_b]
|
||
|
|
||
|
|