Polish the model/view tutorial examples
- Reorder the class declarations, moving private sections last - Make constructors explicit - Add space to the comments - Introduce auto - Replace slot MainWindow::showWindowTitle() by a direct connection to slot QWidget::setWindowTitle(). Change-Id: Ic229162434dfef5f2767d0b4e186759ca0f821f3 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> (cherry picked from commit 8751ca3daeaa2a500a37b070cdcce5a5bb7a165f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
78a5890355
commit
002796928b
@ -12,7 +12,8 @@ class MyModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MyModel(QObject *parent = nullptr);
|
explicit MyModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
@ -41,22 +41,22 @@ QVariant MyModel::data(const QModelIndex &index, int role) const
|
|||||||
.arg(row + 1)
|
.arg(row + 1)
|
||||||
.arg(col +1);
|
.arg(col +1);
|
||||||
case Qt::FontRole:
|
case Qt::FontRole:
|
||||||
if (row == 0 && col == 0) { //change font only for cell(0,0)
|
if (row == 0 && col == 0) { // change font only for cell(0,0)
|
||||||
QFont boldFont;
|
QFont boldFont;
|
||||||
boldFont.setBold(true);
|
boldFont.setBold(true);
|
||||||
return boldFont;
|
return boldFont;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Qt::BackgroundRole:
|
case Qt::BackgroundRole:
|
||||||
if (row == 1 && col == 2) //change background only for cell(1,2)
|
if (row == 1 && col == 2) // change background only for cell(1,2)
|
||||||
return QBrush(Qt::red);
|
return QBrush(Qt::red);
|
||||||
break;
|
break;
|
||||||
case Qt::TextAlignmentRole:
|
case Qt::TextAlignmentRole:
|
||||||
if (row == 1 && col == 1) //change text alignment only for cell(1,1)
|
if (row == 1 && col == 1) // change text alignment only for cell(1,1)
|
||||||
return int(Qt::AlignRight | Qt::AlignVCenter);
|
return int(Qt::AlignRight | Qt::AlignVCenter);
|
||||||
break;
|
break;
|
||||||
case Qt::CheckStateRole:
|
case Qt::CheckStateRole:
|
||||||
if (row == 1 && col == 0) //add a checkbox to cell(1,0)
|
if (row == 1 && col == 0) // add a checkbox to cell(1,0)
|
||||||
return Qt::Checked;
|
return Qt::Checked;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,8 @@ class MyModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MyModel(QObject *parent = nullptr);
|
explicit MyModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
@ -44,9 +44,9 @@ QVariant MyModel::data(const QModelIndex &index, int role) const
|
|||||||
//! [quoting mymodel_b ]
|
//! [quoting mymodel_b ]
|
||||||
void MyModel::timerHit()
|
void MyModel::timerHit()
|
||||||
{
|
{
|
||||||
//we identify the top left cell
|
// we identify the top left cell
|
||||||
QModelIndex topLeft = createIndex(0,0);
|
QModelIndex topLeft = createIndex(0,0);
|
||||||
//emit a signal to make the view reread identified data
|
// emit a signal to make the view reread identified data
|
||||||
emit dataChanged(topLeft, topLeft, {Qt::DisplayRole});
|
emit dataChanged(topLeft, topLeft, {Qt::DisplayRole});
|
||||||
}
|
}
|
||||||
//! [quoting mymodel_b ]
|
//! [quoting mymodel_b ]
|
||||||
|
@ -11,14 +11,17 @@ class MyModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MyModel(QObject *parent = nullptr);
|
explicit MyModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
private:
|
|
||||||
QTimer *timer;
|
|
||||||
private slots:
|
private slots:
|
||||||
void timerHit();
|
void timerHit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QTimer *timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MYMODEL_H
|
#endif // MYMODEL_H
|
||||||
|
@ -10,7 +10,8 @@ class MyModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MyModel(QObject *parent = nullptr);
|
explicit MyModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
@ -11,15 +11,10 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
, tableView(new QTableView(this))
|
, tableView(new QTableView(this))
|
||||||
{
|
{
|
||||||
setCentralWidget(tableView);
|
setCentralWidget(tableView);
|
||||||
MyModel *myModel = new MyModel(this);
|
auto *myModel = new MyModel(this);
|
||||||
tableView->setModel(myModel);
|
tableView->setModel(myModel);
|
||||||
|
|
||||||
//transfer changes to the model to the window title
|
// transfer changes to the model to the window title
|
||||||
connect(myModel, &MyModel::editCompleted,
|
connect(myModel, &MyModel::editCompleted,
|
||||||
this, &MainWindow::showWindowTitle);
|
this, &QWidget::setWindowTitle);
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::showWindowTitle(const QString &title)
|
|
||||||
{
|
|
||||||
setWindowTitle(title);
|
|
||||||
}
|
}
|
||||||
|
@ -7,19 +7,18 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QTableView; //forward declaration
|
class QTableView; // forward declaration
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTableView *tableView;
|
QTableView *tableView;
|
||||||
public:
|
|
||||||
MainWindow(QWidget *parent = nullptr);
|
|
||||||
public slots:
|
|
||||||
void showWindowTitle(const QString &title);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QTreeView; //forward declarations
|
class QTreeView; // forward declarations
|
||||||
class QStandardItemModel;
|
class QStandardItemModel;
|
||||||
class QStandardItem;
|
class QStandardItem;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@ -16,14 +16,16 @@ QT_END_NAMESPACE
|
|||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTreeView *treeView;
|
|
||||||
QStandardItemModel *standardModel;
|
|
||||||
QList<QStandardItem *> prepareRow(const QString &first,
|
QList<QStandardItem *> prepareRow(const QString &first,
|
||||||
const QString &second,
|
const QString &second,
|
||||||
const QString &third) const;
|
const QString &third) const;
|
||||||
public:
|
|
||||||
MainWindow(QWidget *parent = nullptr);
|
QTreeView *treeView;
|
||||||
|
QStandardItemModel *standardModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
@ -14,20 +14,20 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
, standardModel(new QStandardItemModel(this))
|
, standardModel(new QStandardItemModel(this))
|
||||||
{
|
{
|
||||||
setCentralWidget(treeView);
|
setCentralWidget(treeView);
|
||||||
QStandardItem *rootNode = standardModel->invisibleRootItem();
|
auto *rootNode = standardModel->invisibleRootItem();
|
||||||
|
|
||||||
|
|
||||||
//defining a couple of items
|
// defining a couple of items
|
||||||
QStandardItem *americaItem = new QStandardItem("America");
|
auto *americaItem = new QStandardItem("America");
|
||||||
QStandardItem *mexicoItem = new QStandardItem("Canada");
|
auto *mexicoItem = new QStandardItem("Canada");
|
||||||
QStandardItem *usaItem = new QStandardItem("USA");
|
auto *usaItem = new QStandardItem("USA");
|
||||||
QStandardItem *bostonItem = new QStandardItem("Boston");
|
auto *bostonItem = new QStandardItem("Boston");
|
||||||
QStandardItem *europeItem = new QStandardItem("Europe");
|
auto *europeItem = new QStandardItem("Europe");
|
||||||
QStandardItem *italyItem = new QStandardItem("Italy");
|
auto *italyItem = new QStandardItem("Italy");
|
||||||
QStandardItem *romeItem = new QStandardItem("Rome");
|
auto *romeItem = new QStandardItem("Rome");
|
||||||
QStandardItem *veronaItem = new QStandardItem("Verona");
|
auto *veronaItem = new QStandardItem("Verona");
|
||||||
|
|
||||||
//building up the hierarchy
|
// building up the hierarchy
|
||||||
rootNode-> appendRow(americaItem);
|
rootNode-> appendRow(americaItem);
|
||||||
rootNode-> appendRow(europeItem);
|
rootNode-> appendRow(europeItem);
|
||||||
americaItem-> appendRow(mexicoItem);
|
americaItem-> appendRow(mexicoItem);
|
||||||
@ -37,11 +37,11 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
italyItem-> appendRow(romeItem);
|
italyItem-> appendRow(romeItem);
|
||||||
italyItem-> appendRow(veronaItem);
|
italyItem-> appendRow(veronaItem);
|
||||||
|
|
||||||
//register the model
|
// register the model
|
||||||
treeView->setModel(standardModel);
|
treeView->setModel(standardModel);
|
||||||
treeView->expandAll();
|
treeView->expandAll();
|
||||||
|
|
||||||
//selection changes shall trigger a slot
|
// selection changes shall trigger a slot
|
||||||
QItemSelectionModel *selectionModel = treeView->selectionModel();
|
QItemSelectionModel *selectionModel = treeView->selectionModel();
|
||||||
connect(selectionModel, &QItemSelectionModel::selectionChanged,
|
connect(selectionModel, &QItemSelectionModel::selectionChanged,
|
||||||
this, &MainWindow::selectionChangedSlot);
|
this, &MainWindow::selectionChangedSlot);
|
||||||
@ -53,13 +53,13 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
//! [quoting modelview_b]
|
//! [quoting modelview_b]
|
||||||
void MainWindow::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
|
void MainWindow::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
|
||||||
{
|
{
|
||||||
//get the text of the selected item
|
// get the text of the selected item
|
||||||
const QModelIndex index = treeView->selectionModel()->currentIndex();
|
const QModelIndex index = treeView->selectionModel()->currentIndex();
|
||||||
QString selectedText = index.data(Qt::DisplayRole).toString();
|
QString selectedText = index.data(Qt::DisplayRole).toString();
|
||||||
//find out the hierarchy level of the selected item
|
// find out the hierarchy level of the selected item
|
||||||
int hierarchyLevel = 1;
|
int hierarchyLevel = 1;
|
||||||
QModelIndex seekRoot = index;
|
QModelIndex seekRoot = index;
|
||||||
while (seekRoot.parent() != QModelIndex()) {
|
while (seekRoot.parent().isValid()) {
|
||||||
seekRoot = seekRoot.parent();
|
seekRoot = seekRoot.parent();
|
||||||
hierarchyLevel++;
|
hierarchyLevel++;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QTreeView; //forward declarations
|
class QTreeView; // forward declarations
|
||||||
class QStandardItemModel;
|
class QStandardItemModel;
|
||||||
class QItemSelection;
|
class QItemSelection;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@ -16,13 +16,15 @@ QT_END_NAMESPACE
|
|||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTreeView *treeView;
|
QTreeView *treeView;
|
||||||
QStandardItemModel *standardModel;
|
QStandardItemModel *standardModel;
|
||||||
private slots:
|
|
||||||
void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection);
|
|
||||||
public:
|
|
||||||
MainWindow(QWidget *parent = nullptr);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user