Qt SQLite数据库多线程的使用方式3
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QThread>
// 自定义的数据库操作类
class DatabaseWorker : public QObject {
Q_OBJECT
public:
DatabaseWorker(QSqlDatabase db) : m_db(db) {}
public slots:
void writeToDatabase() {
// 确保数据库连接是可用的
if (!m_db.isOpen()) {
if (!m_db.open()) {
qDebug() << "数据库打开失败:" << m_db.lastError().text();
return;
}
}
// 执行数据库操作
// ...
}
private:
QSqlDatabase m_db;
};
// 主线程中使用
int main(int argc, char *argv[]) {
// 设置数据库配置
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("your_database_name.db");
// 创建数据库操作对象并移动到另一个线程中
DatabaseWorker *worker = new DatabaseWorker(db);
worker->moveToThread(new QThread());
QThread::connect(worker, &DatabaseWorker::finished, worker, &DatabaseWorker::deleteLater);
QThread::connect(qApp, &QApplication::aboutToQuit, worker, &DatabaseWorker::deleteLater);
// 启动线程
worker->moveToThread(new QThread());
QThread* thread = new QThread();
worker->moveToThread(thread);
thread->start();
// 连接信号槽以启动数据库操作
QMetaObject::invokeMethod(worker, "writeToDatabase");
return 0;
}
这个代码示例展示了如何在Qt中创建一个数据库操作类,并将其放在一个新的线程中运行。这样可以避免在主线程中进行数据库操作,从而避免UI响应问题。这个例子使用了Qt的信号和槽机制来安全地启动数据库操作,并在操作完成后清理数据库操作对象。
评论已关闭