首页 > 编程语言 >C++ 单例模式

C++ 单例模式

时间:2022-11-10 11:00:02浏览次数:40  
标签:const pOperateSqlite tbName 模式 DatabaseManager bool C++ 单例 QString

有时候用到单例模式,记录一下。

另外,有时候也用 静态函数。

头文件:

 1 #ifndef DATABASEMANAGER_H
 2 #define DATABASEMANAGER_H
 3 
 4 
 5 #include "operatesqlite.h"
 6 #include <QMutex>
 7 #include <QMutexLocker>
 8 
 9 class DatabaseManager
10 {
11 public:
12     static QSharedPointer<DatabaseManager>& instance()
13     {
14 
15         if (m_pInstance.isNull())
16         {
17             QMutexLocker mutexLocker(&m_Mutex);
18             if (m_pInstance.isNull())
19                 m_pInstance = QSharedPointer<DatabaseManager>(new DatabaseManager());
20         }
21         return m_pInstance;
22     }
23 private:
24     DatabaseManager();
25     DatabaseManager(const DatabaseManager&){}
26     DatabaseManager& operator==(const DatabaseManager&){}
27 private:
28     static QMutex m_Mutex;
29     static QSharedPointer<DatabaseManager> m_pInstance;
30 
31 
32 public:
33     //向表中插入数据
34     bool InsertSqlData(QString tbName, QStringList& listField, QStringList& listVal);
35     //记录是否存在
36     bool IsRecordExist(const QString& tbName, const QString& field, const QString& value);
37     bool GetRecordData(QString strSql);
38     bool GetAirportInfo(QTableWidget* tbAirportInfo);
39     bool DeleteRecord(const QString& tbName, const QString& field, const QString& fieldVal);
40 
41 private:
42     OperateSqlite   *m_pOperateSqlite;
43 };
44 
45 
46 
47 #endif // DATABASEMANAGER_H

cpp文件:

 1 #include "databasemanager.h"
 2 #include <QSqlRecord>
 3 #include <QDebug>
 4 
 5 QMutex DatabaseManager::m_Mutex;
 6 QSharedPointer<DatabaseManager> DatabaseManager::m_pInstance = nullptr;
 7 
 8 DatabaseManager::DatabaseManager()
 9 {
10     m_pOperateSqlite = new OperateSqlite;
11 }
12 
13 bool DatabaseManager::InsertSqlData(QString tbName, QStringList &listField, QStringList &listVal)
14 {
15      return m_pOperateSqlite->InserSqlData(tbName, listField, listVal);
16 }
17 
18 bool DatabaseManager::IsRecordExist(const QString &tbName, const QString &field, const QString &value)
19 {
20     return m_pOperateSqlite->IsRecordExist1(tbName, field, value);
21 }
22 
23 bool DatabaseManager::GetRecordData(QString strSql)
24 {
25     QSqlQuery q(m_pOperateSqlite->GetSqlDataBase());
26     //QString sql = "select * from tbAirportInfo";
27     if(m_pOperateSqlite->GetRecordData(q, strSql)){
28         int nNameIndex = q.record().indexOf("name");
29         int nLongitudeIndex = q.record().indexOf("longitude");
30         while (q.next()) {
31             QString strName = q.value(nNameIndex).toString();
32             QString strLongitude = q.value(nLongitudeIndex).toString();
33             qDebug() << strName;
34             qDebug() <<strLongitude;
35         }
36         return true;
37     }
38     return false;
39 }
40 
41 bool DatabaseManager::GetAirportInfo(QTableWidget *tbAirportInfo)
42 {
43     QSqlQuery q(m_pOperateSqlite->GetSqlDataBase());
44     QString sql = "select * from tbAirportInfo";
45     if(m_pOperateSqlite->GetRecordData(q, sql)){
46         int nNameIndex = q.record().indexOf("name");
47         int nLongitudeIndex = q.record().indexOf("longitude");
48         int nLatitudeIndex = q.record().indexOf("latitude");
49         while (q.next()) {
50             QString strName = q.value(nNameIndex).toString();
51             QString strLongitude = q.value(nLongitudeIndex).toString();
52             QString strLatitude = q.value(nLatitudeIndex).toString();
53             QStringList list;
54             list << strName << strLongitude << strLatitude;
55 
56             int nRowCount = tbAirportInfo->rowCount();
57             tbAirportInfo->setRowCount(nRowCount + 1);
58 
59             tbAirportInfo->setRowHeight(nRowCount, 60);
60             QTableWidgetItem* item = new QTableWidgetItem(QString("%1").arg(nRowCount + 1));
61             item->setTextAlignment(Qt::AlignCenter);
62             tbAirportInfo->setItem(nRowCount, 0, item);
63             for(int i = 0; i < list.size(); i++)
64             {
65                 item = new QTableWidgetItem(list.at(i));
66                 item->setTextAlignment(Qt::AlignCenter);
67                 tbAirportInfo->setItem(nRowCount, i + 1, item);
68             }
69         }
70         return true;
71     }
72     return false;
73 }
74 
75 bool DatabaseManager::DeleteRecord(const QString &tbName, const QString &field, const QString& fieldVal)
76 {
77     QSqlQuery q(m_pOperateSqlite->GetSqlDataBase());
78     QString sql = QString("delete from %1 where %2 = '%3'").arg(tbName).arg(field).arg(fieldVal);
79     return m_pOperateSqlite->ExecSql(sql);
80 }

 

标签:const,pOperateSqlite,tbName,模式,DatabaseManager,bool,C++,单例,QString
From: https://www.cnblogs.com/warmlight/p/16876325.html

相关文章

  • 单例模式的5种实现方式
    publicclassTest{//饿汉式,线程安全,但提前加载,浪费内存privatestaticTestinstance=newTest();privatestaticTestgetInstance(){r......
  • C++中virtual(虚函数)的用法
    C++中virtual(虚函数)的用法在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。什么是虚函数:虚函数是指一个类中你希望重载的成员函数,当你用一个......
  • 初识设计模式 - 访问者模式
    简介访问者设计模式(VisitorDesignPattern)的定义是,允许一个或多个操作应用到一组对象上,解耦操作和对象本身。在使用访问者模式的时候,被访问的元素通常不是单独存在的,它......
  • 问题 E: 零基础学C/C++184——吉祥数
    可以利用cishu数组来记录每个数字是否被淘汰。本题的关键就是再算出如题的数组b的时候向a数组检查是,不能因为第一个数被淘汰而不算他的吉祥数,应在一轮计算结束的时候遍历......
  • 浅谈PHP设计模式的迭代器模式
    简介:迭代器模式,是行为型的设计模式。提供一中方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。适用场景:除了学习,在PHP中几乎没有应用场景。优......
  • 使用opencv进行RGB--YUV转换 c++版本
    ////CreatedbyDangXSon2022/4/27.//#ifndefCPLUSPLUS_PROJECT1_YUV_HELPER_H#defineCPLUSPLUS_PROJECT1_YUV_HELPER_H#include"opencv2/opencv.hpp"stat......
  • c++ 函数-遍历文件夹
    #pragmaonce#include<iostream>#include<string.h>#include<unistd.h>#include<sys/io.h>#include<sys/types.h>#include<sys/stat.h>#include"dirent.h"......
  • c++字节序判断(大端和小端) 网络传输中的大小端
    Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 如:16bit宽的......
  • C++对象模型:g++的实现(七)
    这篇博客来总结一下《深度探索C++对象模型》第5章构造、析构、拷贝语义学的内容。是对主要内容的总结,原文请看原书。1.构造函数按照发生的顺序,一个类的构造函数会做的......
  • 设计模式---责任链模式
    简述将各个功能拆分后分别封装(各功能解耦),需要时可自由组合(包括执行顺序)话不多说,看个优化案例吧。优化案例最初版以下是模拟客户端想服务端发送请求的业务流程。......