环境:VS+ Qt+sqlite3
首先创建一个数据库test.db,建立一张表student
create table student(id integer, name nvarchar(20), age integer)
具体代码:
#include "MyMainWindow.h"
#include <stdio.h>
#include "sqlite3.h"
MyMainWindow::MyMainWindow(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("D:\\database\\test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
}
else {
fprintf(stderr, "Opened database successfully\n");
}
char *sql = "create table student(id integer, name nvarchar(20), age integer)";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sql = "insert into \"student\" values(1 ,'hahahaoa', 20 );";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sql = "insert into \"student\" values(2 ,'dfdhaoa', 21 );";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sqlite3_close(db);
}
1.利用Qt中的tableView插件显示数据库
2.并且点击某一行可以显示该行为第几行
3.也可以显示某行固定列的内容
实现:首先ui界面拖一个tableView控件
代码:
#include "MyMainWindow.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlRecord>
#include <QtSql/QSqlQuery>
#include "QtSql/qsql.h"
#include "QtSql/QsqlQueryModel"
#include "QDebug"
#include "QModelIndex"
MyMainWindow::MyMainWindow(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// QsqlDatabase db = QsqlDatabase::addDatabase("QSQLITE");
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// db.setDatabaseName("test.db");
db.setDatabaseName("D:\\database\\test.db");
if (!db.open())
{
qDebug() << "mistake"; //错误处理
}
static QSqlQueryModel *model = new QSqlQueryModel(ui.tableView);
model->setQuery(QString("select * from student"));
//model->setHeaderData(0, Qt::Horizontal, QObject::tr("编号"));
//model->setHeaderData(1, Qt::Horizontal, QObject::tr("姓名"));
//model->setHeaderData(2, Qt::Horizontal, QObject::tr("年龄"));
ui.tableView->setModel(model);
db.close();
connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(show_list()));
}
void MyMainWindow::show_list()
{
//const QModelIndex &index;
int row = ui.tableView->currentIndex().row();
qDebug()<<row;
QAbstractItemModel *model = ui.tableView->model();
QModelIndex index1 = model->index(row, 1);//选中行第二列的内容
QVariant data = model->data(index1);
qDebug() << data.toString();
// qDebug()<<model->data(index1).toString();
}