网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月03日漏签0天
qt吧 关注:49,776贴子:159,438
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回qt吧
>0< 加载中...

Qt单例模式教程

  • 只看楼主
  • 收藏

  • 回复
  • 戏言zare
  • 吧主
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一、适用场景
适合于可能被整个工程任意处被使用,且不必要被重复创建的场景。例如数据库相关、接收信息相关的类。
单例线程会在首次使用时被创建和初始化,不需要手动创建。
二、编写以下以数据库单例线程为例子
单例线程本质上还是线程,所以继承于QThread,头文件要包含<QThread>。
.h文件
#ifndef DATABASETHREAD_H
#define DATABASETHREAD_H
#include <QThread>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
class DatabaseThread : public QThread{
Q_OBJECT
public:
explicit DatabaseThread(QObject *parent = nullptr);
static DatabaseThread *Instance(){
if(!s_DatabaseThread){
s_DatabaseThread = new DatabaseThread;
}
return s_DatabaseThread;
}
static void deleteInstance(){
if(s_DatabaseThread){
s_DatabaseThread->quit();
s_DatabaseThread->wait();
s_DatabaseThread->deleteLater();
s_DatabaseThread = Q_NULLPTR;
}
}
void testfunction();//数据库使用相关的函数可在此声明
private:
static DatabaseThread *s_DatabaseThread;
QSqlDatabase db;
};#endif // DATABASETHREAD_H
.cpp文件
DatabaseThread *DatabaseThread::s_DatabaseThread = 0;
DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent){
if(QSqlDatabase::contains("Data"))
db = QSqlDatabase::database("Data");
else
db = QSqlDatabase::addDatabase("QSQLITE","Data");
db.setDatabaseName("Liquidflash.db3");
db.open();
}
三、使用
单例线程不需要手动创建或初始化,在使用的类中包含一下#include “databasethread.h”
然后直接按以下方式调用方法:
DatabaseThread::Instance()->testfunction();
不需要担心由于没有手动创建和初始化导致的单例构造函数不执行,单你首次使用到单例线程时(无论是调用其中哪个函数),都会自动先执行构造函数。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回qt吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示