Qt单例模式

singleton.h

#pragma once

#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理

#include <QtWidgets/QWidget>
#include <QMutex>

#include "ui_singleton.h"

class Singleton : public QWidget {
    Q_OBJECT
public:
    inline static Singleton *Singleton::getInstance() {
        if (Q_NULLPTR == instance) {
            QMutexLocker lock(&mutex);
            if (Q_NULLPTR == instance) {
                Singleton *instance_ = new Singleton();
                instance = instance_;
                atexit(release);
            }
        }
        return instance;
    }
    inline static void release() { // 可以在这里销毁所有的资源
            if (Q_NULLPTR != instance) {
                instance->deleteLater();
                instance = Q_NULLPTR;
            }
        }

private:
    Singleton(QWidget *parent = Q_NULLPTR);
    ~Singleton();
    static Singleton *instance;
    static QMutex mutex;

    Ui::Singleton ui;
};

singleton.cpp

#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理

#include "singleton.h"

Singleton *Singleton::instance = Q_NULLPTR;
QMutex Singleton::mutex;

Singleton::Singleton(QWidget *parent)
    : QWidget(parent) {
    ui.setupUi(this);
}

Singleton::~Singleton() {
}

main.cpp

#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理

#include <QtWidgets/QApplication>

#include "singleton.h"

int main(int argc, char *argv[]) {
    // 启用 Retina 高分辨率
    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QApplication app(argc, argv);

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));   // 使用 UTF-8 的运行时环境
    QDir::setCurrent(QCoreApplication::applicationDirPath());   // 设置当前目录为 app所在目录

    Singleton::getInstance()->show();

    int code = app.exec();  // 进入 Qt 事件队列

    return app.code();
}

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2020/6/Qt-Singleton

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

HTML特殊符号
0 条评论
已登录,注销 取消