Qt 学习笔记(四):目录文件、定时器与 SQLite
学习 Qt 中的目录和文件操作、定时器机制,以及使用 SQLite 保存和查询应用数据。
目录与文件
目录操作
1. 包含头文件
#include <QDir>
#include <QFileDialog>
2. 目录基础操作示例
// 使用QFileDialog选择一个目录的路径
QString path = QFileDialog::getExistingDirectory(this, "打开文件夹", "/");
if (path.isEmpty())
return;
// 构造目录对象
QDir dir(path);
// 获取目录下所有的文件名
QStringList list = dir.entryList();
// 把文件名列表显示到界面的列表控件中
ui->listWidget->clear();
ui->listWidget->addItems(list);
文件操作
1. 包含头文件
#include <QFile>
#include <QFileDialog>
#include <QDebug>
2. 文件读操作示例
// 通过文件对话框,选择要操作的文件名
QString pathfile = QFileDialog::getOpenFileName(this);
if (pathfile.isEmpty())
return;
// 构造文件对象
QFile file(pathfile);
// 打开文件,以只读的方式打开文本文件
bool ok = file.open(QFile::ReadOnly | QFile::Text);
if (!ok)
{
qDebug() << "open read file error: " << file.errorString();
return ;
}
// 读文件
while (!file.atEnd())
{
// 一次读一行
QByteArray line = file.readLine();
// 把读到的一行数据插入到界面的textBrowser中
ui->textBrowser->insertPlainText(line);
}
// 关闭文件
file.close();
3. 文件写操作示例
// 通过文件对话框获取一个用于写操作的文件名
QString pathfile = QFileDialog::getSaveFileName(this);
if (pathfile.isEmpty())
return;
// 构造文件对象
QFile file(pathfile);
// 以只写的方式打开文件
bool ok = file.open(QFile::WriteOnly);
if (!ok)
{
qDebug() << "open save file error:" << file.errorString();
return;
}
// 把界面上textBrowser中的内容转成纯文本
QString text = ui->textBrowser->toPlainText();
// 把QString类型的字符串先转成QByteArray, 再写入文件
file.write(text.toUtf8());
// 关闭文件
file.close();
定时器
1. 包含头文件
#include <QTimer>
2. 初始化定时器对象
// 初始化定时器对象
timer = new QTimer(this);
// 设置超时时间
timer->setInterval(1000); // 1s
// 连接超时信号与自定义的槽函数
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
说明:timer对象通常是一个成员指针,在头文件中声明,初始化过程一般写在构造函数中
3. 槽函数获取显示系统时间示例
// 定时器超时后自动执行的槽函数
void MainWindow::onTimeout()
{
// 获取系统的当前日期时间
QDateTime dt = QDateTime::currentDateTime();
// 显示到界面上的标签中
ui->label->setText(dt.toString("yyyy/MM/dd hh:mm:ss dddd"));
}
数据库操作(SQLite3)
1. 添加数据库模块
在项目的pro文件中添加以下代码
QT += sql
2. 包含相关头文件
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
3. 连接数据库
// 数据库连接初始化
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
bool ok = db.open();
if (!ok)
{
qDebug() << "open db error: " << db.lastError().text();
return;
}
说明:db对象一般做为成员变量,在头文件中声明
4. 执行SQL语句
// 创建关系表
QString sql = "create table if not exists t_user(name TEXT primary key, age INTEGER); ";
QSqlQuery query;
bool ok = query.exec(sql);
if (!ok)
{
qDebug() << "create table error: " << query.lastError().text();
return;
}






Comments | NOTHING