Create a Qt widgets application and mainwindow.cpp file modify the code as follows
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QSqlDatabase> #include <QDebug> #include <QSqlError> #include <QSqlQuery> #include <QSqlRecord> #include <QTableView> #include <QSqlTableModel> static bool createConnectionDateBase() { Db QSqlDatabase = QSqlDatabase :: addDatabase ( " QSQLITE " ) ;; // create QSQLdatabase object that specifies what kind of SQL QT used. db.setDatabaseName ( " testSQL.db " ); IF (! db.Open ()) { :: Critical QMessageBox (NULL, " open the database failed " , " open the database failed! " , QMessageBox::Cancel); return false; } QSqlQuery query; query.exec("create table TEST_SQL (id int(1) primary key,name char(200),age int(1),chenked int (1))"); query.exec("insert into TEST_SQL values(1,'测试1',18,0)"); query.exec("insert into TEST_SQL values(2,'测试2',19,0)"); query.exec("insert into TEST_SQL values(3,'测试3',20,0)"); return true; } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); if(!createConnectionDateBase()) { return; } model = new QSqlTableModel(this); model->setTable("TEST_SQL"); model->setHeaderData(0,Qt::Horizontal,tr("ID号")); model->setHeaderData(1,Qt::Horizontal,tr("姓名")); Model -> setHeaderData ( 2 , Qt :: Horizontal, TR ( " Age " )); model->select(); QTableView *view = new QTableView(this); view->setModel(model); setCentralWidget(view); //ui->tableView->setModel(model); } MainWindow :: ~ MainWindow () { delete ui; }
Run to see the effect,
Now add to this list box, you need to inherit QSqlTableModel class in the project Add new, a new C ++ class, named myTableModel, then the resulting mytablemodel.h and metaoblemodel.cpp amended as follows:
#ifndef MYTABLEMODEL_H #define MYTABLEMODEL_H #include <QtSql> class myTableModel:public QSqlTableModel { Q_OBJECT public: myTableModel( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() ); bool setData( const QModelIndex &index, const QVariant &value, int role ); QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; }; #endif // MYTABLEMODEL_H
#include "mytablemodel.h" The QMap < int , the CheckState the Qt ::> check_state_map; int checkColumn =. 3; // the second box into several columns, counted from 0 myTableModel :: myTableModel (QObject * parent, QSqlDatabase DB) { } bool myTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if(!index.isValid()) return false; if (role == Qt::CheckStateRole && index.column() == checkColumn) { check_state_map[index.row()] = (value == Qt::Checked ? Qt::Checked : Qt::Unchecked);return true; } else return QSqlTableModel::setData(index, value,role); } QVariant myTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.column() != checkColumn ) { return QSqlTableModel::data(index, role); } switch(role) { case Qt::CheckStateRole: if(index.column() == checkColumn) { if (check_state_map.contains(index.row())) { return check_state_map[index.row()] == Qt::Checked ? Qt::Checked : Qt::Unchecked; } return Qt::Unchecked; } default: return QVariant(); } return QVariant(); } Qt::ItemFlags myTableModel::flags(const QModelIndex &index) const { if (!index.isValid()) return 0; if (index.column() == checkColumn) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable; else return QSqlTableModel::flags(index); return Qt::ItemIsEnabled | Qt::ItemIsSelectable; }
Then the file header contains the mianwindow.cpp mytablemodel.h mianwindow.cpp constructor then modified as follows:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); if(!createConnectionDateBase()) { return; } model = new myTableModel(this); model->setTable("TEST_SQL"); model->setHeaderData(0,Qt::Horizontal,tr("ID号")); model->setHeaderData(1,Qt::Horizontal,tr("姓名")); Model -> setHeaderData ( 2 , Qt :: Horizontal, TR ( " Age " )); model->select(); QTableView *view = new QTableView(this); view->setModel(model); setCentralWidget(view); //ui->tableView->setModel(model); }
And then run to see results
Check box has appeared in the first three.
As to how to know if it is selected,
In myTableModel.cpp file in check_state_map, check_state_map [i] value is the value of the i-th row CheckBox.