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
|
||||
public:
|
||||
MyModel(QObject *parent = nullptr);
|
||||
explicit MyModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(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;
|
||||
|
@ -41,22 +41,22 @@ QVariant MyModel::data(const QModelIndex &index, int role) const
|
||||
.arg(row + 1)
|
||||
.arg(col +1);
|
||||
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;
|
||||
boldFont.setBold(true);
|
||||
return boldFont;
|
||||
}
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
@ -10,7 +10,8 @@ class MyModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MyModel(QObject *parent = nullptr);
|
||||
explicit MyModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(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;
|
||||
|
@ -44,9 +44,9 @@ QVariant MyModel::data(const QModelIndex &index, int role) const
|
||||
//! [quoting mymodel_b ]
|
||||
void MyModel::timerHit()
|
||||
{
|
||||
//we identify the top left cell
|
||||
// we identify the top left cell
|
||||
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});
|
||||
}
|
||||
//! [quoting mymodel_b ]
|
||||
|
@ -11,14 +11,17 @@ class MyModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MyModel(QObject *parent = nullptr);
|
||||
explicit MyModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(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;
|
||||
private:
|
||||
QTimer *timer;
|
||||
|
||||
private slots:
|
||||
void timerHit();
|
||||
|
||||
private:
|
||||
QTimer *timer;
|
||||
};
|
||||
|
||||
#endif // MYMODEL_H
|
||||
|
@ -10,7 +10,8 @@ class MyModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MyModel(QObject *parent = nullptr);
|
||||
explicit MyModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(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;
|
||||
|
@ -11,15 +11,10 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
, tableView(new QTableView(this))
|
||||
{
|
||||
setCentralWidget(tableView);
|
||||
MyModel *myModel = new MyModel(this);
|
||||
auto *myModel = new MyModel(this);
|
||||
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,
|
||||
this, &MainWindow::showWindowTitle);
|
||||
}
|
||||
|
||||
void MainWindow::showWindowTitle(const QString &title)
|
||||
{
|
||||
setWindowTitle(title);
|
||||
this, &QWidget::setWindowTitle);
|
||||
}
|
||||
|
@ -7,19 +7,18 @@
|
||||
#include <QMainWindow>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QTableView; //forward declaration
|
||||
class QTableView; // forward declaration
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
private:
|
||||
QTableView *tableView;
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
public slots:
|
||||
void showWindowTitle(const QString &title);
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <QMainWindow>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QTreeView; //forward declarations
|
||||
class QTreeView; // forward declarations
|
||||
class QStandardItemModel;
|
||||
class QStandardItem;
|
||||
QT_END_NAMESPACE
|
||||
@ -16,14 +16,16 @@ QT_END_NAMESPACE
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
private:
|
||||
QTreeView *treeView;
|
||||
QStandardItemModel *standardModel;
|
||||
QList<QStandardItem *> prepareRow(const QString &first,
|
||||
const QString &second,
|
||||
const QString &third) const;
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
QTreeView *treeView;
|
||||
QStandardItemModel *standardModel;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
@ -14,20 +14,20 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
, standardModel(new QStandardItemModel(this))
|
||||
{
|
||||
setCentralWidget(treeView);
|
||||
QStandardItem *rootNode = standardModel->invisibleRootItem();
|
||||
auto *rootNode = standardModel->invisibleRootItem();
|
||||
|
||||
|
||||
//defining a couple of items
|
||||
QStandardItem *americaItem = new QStandardItem("America");
|
||||
QStandardItem *mexicoItem = new QStandardItem("Canada");
|
||||
QStandardItem *usaItem = new QStandardItem("USA");
|
||||
QStandardItem *bostonItem = new QStandardItem("Boston");
|
||||
QStandardItem *europeItem = new QStandardItem("Europe");
|
||||
QStandardItem *italyItem = new QStandardItem("Italy");
|
||||
QStandardItem *romeItem = new QStandardItem("Rome");
|
||||
QStandardItem *veronaItem = new QStandardItem("Verona");
|
||||
// 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
|
||||
// building up the hierarchy
|
||||
rootNode-> appendRow(americaItem);
|
||||
rootNode-> appendRow(europeItem);
|
||||
americaItem-> appendRow(mexicoItem);
|
||||
@ -37,11 +37,11 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
italyItem-> appendRow(romeItem);
|
||||
italyItem-> appendRow(veronaItem);
|
||||
|
||||
//register the model
|
||||
// register the model
|
||||
treeView->setModel(standardModel);
|
||||
treeView->expandAll();
|
||||
|
||||
//selection changes shall trigger a slot
|
||||
// selection changes shall trigger a slot
|
||||
QItemSelectionModel *selectionModel = treeView->selectionModel();
|
||||
connect(selectionModel, &QItemSelectionModel::selectionChanged,
|
||||
this, &MainWindow::selectionChangedSlot);
|
||||
@ -53,13 +53,13 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
//! [quoting modelview_b]
|
||||
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();
|
||||
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;
|
||||
QModelIndex seekRoot = index;
|
||||
while (seekRoot.parent() != QModelIndex()) {
|
||||
while (seekRoot.parent().isValid()) {
|
||||
seekRoot = seekRoot.parent();
|
||||
hierarchyLevel++;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <QMainWindow>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QTreeView; //forward declarations
|
||||
class QTreeView; // forward declarations
|
||||
class QStandardItemModel;
|
||||
class QItemSelection;
|
||||
QT_END_NAMESPACE
|
||||
@ -16,13 +16,15 @@ QT_END_NAMESPACE
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
private slots:
|
||||
void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection);
|
||||
|
||||
private:
|
||||
QTreeView *treeView;
|
||||
QStandardItemModel *standardModel;
|
||||
private slots:
|
||||
void selectionChangedSlot(const QItemSelection &newSelection, const QItemSelection &oldSelection);
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user