Qt 学习笔记(四):目录文件、定时器与 SQLite

发布于 11 天前  51 次阅读


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;
    }

"When faced with uncertainty, ask the spring breeze."