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