Qt+VS tableView显示数据库,并对某条数据库进行操作

环境: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();
}

在这里插入图片描述

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void Widget::Select() //查询 { QString name = ui->lineEdit->text(); model->setFilter(QObject::tr("id = '%1'").arg(name)); //根据姓名进行筛选 model->select(); //显示结果 } void Widget::Delect() //删除当前行 { int curRow = ui->tableView->currentIndex().row(); //获取选中的行 model->removeRow(curRow); //删除该行 int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定" "删除当前行吗?"), QMessageBox::Yes,QMessageBox::No); if(ok == QMessageBox::No) { model->revertAll(); //如果不删除,则撤销 } else model->submitAll(); //否则提交,在数据库中删除该行 } void Widget::Add() //插入记录 { int rowNum = model->rowCount(); //获得表的行数 int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),id); //model->submitAll(); //可以直接提交 } void Widget::Back() //返回全表 { model->setTable("student"); //重新关联表 model->setHeaderData(0, Qt::Horizontal, "Time"); model->setHeaderData(1, Qt::Horizontal, "Temperature"); model->select(); //这样才能再次显示整个表的内容 } void Widget::Amend() //提交修改 { model->database().transaction(); //开始事务操作 if (model->submitAll()) { model->database().commit(); //提交 } else { model->database().rollback(); //回滚 QMessageBox::warning(this, tr("tableModel"), tr("数据库错误: %1").arg(model->lastError().text())); } } void Widget::Get_time() { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() <rowCount(); //获得表的行数 // int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->submitAll(); } void Widget::readMyCom() { QByteArray temp = myCom->readAll(); if(temp.size()!=0) { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() <rowCount(); //获得表的行数 // int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->setData(model->index(rowNum,1),temp); model->submitAll(); data_light=temp.toInt(); } ui->Receive->append(temp); } void Widget::openCom() { QString portName = ui->portNameComboBox->currentText(); myCom = new Win_QextSerialPort(portName,QextSerialBase::EventDriven); myCom ->open(QIODevice::ReadWrite); if(ui->baudRateComboBox->currentText()==tr("9600")) myCom->setBaudRate(BAUD9600); else if(ui->baudRateComboBox->currentText()==tr("115200")) myCom->setBaudRate(BAUD115200); myCom->setFlowControl(FLOW_OFF); myCom->setTimeout(500); connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom())); ui->openMyComBtn->setEnabled(false); ui->closeMyComBtn->setEnabled(true); ui->baudRateComboBox->setEnabled(false); ui->portNameComboBox->setEnabled(false); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值