qt 写一个demo把故障数据存储在数据库,查询的时候使用分页查询把数据显示在tablewiget
时间: 2024-02-24 13:54:46 浏览: 90
Qt编写的数据库分页demo
5星 · 资源好评率100%
好的,下面是一个简单的 Qt Demo,用于将故障数据存储在数据库中,然后使用分页查询将数据显示在 QTableWidget 中:
1. 首先需要在 Qt 中添加对数据库的支持,可以使用 QSqlDatabase 类来连接数据库。在这里我们使用 SQLite 数据库,因此需要添加对 SQLite 的支持:
```cpp
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("faults.db");
if (!db.open()) {
qDebug() << "Failed to open database:" << db.lastError().text();
return 1;
}
```
2. 接下来,可以创建一个名为 Fault 的表,用于存储故障数据:
```cpp
QSqlQuery query;
if (!query.exec("CREATE TABLE Fault ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT,"
"description TEXT,"
"time DATETIME)")) {
qDebug() << "Failed to create table:" << query.lastError().text();
return 1;
}
```
3. 现在可以将故障数据插入到数据库中:
```cpp
QString name = "Fault A";
QString description = "This is a fault.";
QDateTime time = QDateTime::currentDateTime();
query.prepare("INSERT INTO Fault (name, description, time) "
"VALUES (:name, :description, :time)");
query.bindValue(":name", name);
query.bindValue(":description", description);
query.bindValue(":time", time);
if (!query.exec()) {
qDebug() << "Failed to insert data:" << query.lastError().text();
return 1;
}
```
4. 最后,可以使用分页查询将数据显示在 QTableWidget 中:
```cpp
int pageSize = 20;
int currentPage = 1;
QSqlQueryModel* model = new QSqlQueryModel;
model->setQuery(QString("SELECT * FROM Fault "
"LIMIT %1 OFFSET %2")
.arg(pageSize).arg((currentPage - 1) * pageSize));
ui->tableView->setModel(model);
```
在这里,使用了 QSqlQueryModel 类来将查询结果绑定到 QTableView 控件上,从而实现了数据的可视化。
完整的代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("faults.db");
if (!db.open()) {
qDebug() << "Failed to open database:" << db.lastError().text();
return;
}
QSqlQuery query;
if (!query.exec("CREATE TABLE Fault ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT,"
"description TEXT,"
"time DATETIME)")) {
qDebug() << "Failed to create table:" << query.lastError().text();
return;
}
QString name = "Fault A";
QString description = "This is a fault.";
QDateTime time = QDateTime::currentDateTime();
query.prepare("INSERT INTO Fault (name, description, time) "
"VALUES (:name, :description, :time)");
query.bindValue(":name", name);
query.bindValue(":description", description);
query.bindValue(":time", time);
if (!query.exec()) {
qDebug() << "Failed to insert data:" << query.lastError().text();
return;
}
int pageSize = 20;
int currentPage = 1;
QSqlQueryModel* model = new QSqlQueryModel;
model->setQuery(QString("SELECT * FROM Fault "
"LIMIT %1 OFFSET %2")
.arg(pageSize).arg((currentPage - 1) * pageSize));
ui->tableView->setModel(model);
}
MainWindow::~MainWindow()
{
delete ui;
}
```
注意,这只是一个简单的 Demo,实际情况下可能需要更复杂的查询和分页逻辑。
阅读全文