Qt 5.10 Book Examples
main.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // main.cpp
3 // ======================================================================
4 // This file is a part of the book
5 // "Qt 5.10 Professional programming with C++"
6 // http://qt-book.com
7 // ======================================================================
8 // Copyright (c) 2017 by Max Schlee
9 // ======================================================================
10 
11 #include <QtWidgets>
12 
13 // ======================================================================
14 class TableModel : public QAbstractTableModel {
15 private:
16  int m_nRows;
17  int m_nColumns;
18  QHash<QModelIndex, QVariant> m_hash;
19 
20 public:
21  TableModel(int nRows, int nColumns, QObject* pobj = 0)
22  : QAbstractTableModel(pobj)
23  , m_nRows(nRows)
24  , m_nColumns(nColumns)
25  {
26  }
27 
28  QVariant data(const QModelIndex& index, int nRole) const
29  {
30  if (!index.isValid()) {
31  return QVariant();
32  }
33  QString str =
34  QString("%1,%2").arg(index.row() + 1).arg(index.column() + 1);
35  return (nRole == Qt::DisplayRole || nRole == Qt::EditRole)
36  ? m_hash.value(index, QVariant(str))
37  : QVariant();
38  }
39 
40  bool setData(const QModelIndex& index,
41  const QVariant& value,
42  int nRole
43  )
44  {
45  if (index.isValid() && nRole == Qt::EditRole) {
46  m_hash[index] = value;
47  emit dataChanged(index, index);
48  return true;
49  }
50  return false;
51  }
52 
53  int rowCount(const QModelIndex&) const
54  {
55  return m_nRows;
56  }
57 
58  int columnCount(const QModelIndex&) const
59  {
60  return m_nColumns;
61  }
62 
63  Qt::ItemFlags flags(const QModelIndex& index) const
64  {
65  Qt::ItemFlags flags = QAbstractTableModel::flags(index);
66  return index.isValid() ? (flags | Qt::ItemIsEditable)
67  : flags;
68  }
69 };
70 
71 // ----------------------------------------------------------------------
72 int main(int argc, char *argv[])
73 {
74  QApplication app(argc, argv);
75  TableModel model(200, 200);
76 
77  QTableView tableView;
78  tableView.setModel(&model);
79  tableView.show();
80 
81  return app.exec();
82 }
bool setData(const QModelIndex &index, const QVariant &value, int nRole)
Definition: main.cpp:40
int columnCount(const QModelIndex &) const
Definition: main.cpp:58
int main(int argc, char **argv)
Definition: main.cpp:15
TableModel(int nRows, int nColumns, QObject *pobj=0)
Definition: main.cpp:21
int rowCount(const QModelIndex &) const
Definition: main.cpp:53
Qt::ItemFlags flags(const QModelIndex &index) const
Definition: main.cpp:63
QVariant data(const QModelIndex &index, int nRole) const
Definition: main.cpp:28