QT单例的简单使用

这篇具有很好参考价值的文章主要介绍了QT单例的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单例的.h文件

#ifndef MSLEEP_H
#define MSLEEP_H

#include <QMutex>
#include <QObject>

class msleep
{

public:
//    QString getInstanceName() const;
    static msleep& getInstance(); //获取msleep的唯一对象
//    static void release();

    msleep();    //私有的构造函数
    ~msleep();  //析构函数

    bool sleep(unsigned int msec);

private:
    msleep(const msleep&other); //拷贝构造函数
    msleep& operator=(const msleep&other); //赋值运算操作符
    static QMutex mutex;
    static QScopedPointer<msleep> instance; //静态的QScopedPointer的变量instance
signals:

};

#endif // MSLEEP_H

单例的.cpp文件

#include "msleep.h"

#include <QApplication>
#include <QTime>

QMutex msleep::mutex;
QScopedPointer<msleep> msleep::instance;

msleep& msleep::getInstance() {
    if (instance.isNull()) {
        mutex.lock();
        if (instance.isNull()) {
            instance.reset(new msleep());  //QScopedPointer的reset方法
        }
        mutex.unlock();
    }

    return *instance.data(); //返回指向对象的常量指针
}

//我发现不管是qt自带的Sleep(100);还是如下代码,主线程都会卡死
//但还是感谢这位兄台的代码https://blog.csdn.net/Mohammedzy/article/details/127725203
bool msleep::sleep(unsigned int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while (QTime::currentTime() < dieTime)
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
    return true;
}

msleep::msleep()
{

}

msleep::~msleep()
{

}

使用单例的.cpp代码文章来源地址https://www.toymoban.com/news/detail-563582.html

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "msleep.h"//引入

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	
	msleep::getInstance().sleep(20);//使用。这里仅做使用示例,睡眠在这里是会卡死主线程的
    
}

MainWindow::~MainWindow()
{
    delete ui;
}

到了这里,关于QT单例的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不是单例的单例——巧用ClassLoader

    本文通过如何将一个单例类实例化两次的案例,用代码实践来引入 Java 类加载器相关的概念与工作机制。理解并熟练掌握相关知识之后可以扩宽解决问题的思路,另辟蹊径,达到目的。 单例模式是最常用的设计模式之一。其目的是保证一个类在进程中仅有一个实例,并提供一

    2024年02月04日
    浏览(32)
  • QT connect使用简单介绍

    如图,首先 connect 是线程安全的。其次它有很多重载,当然最重要的还是 QT4 连接和 QT5 连接的区别,这个函数重载表示 connect 函数也是支持 lambda 函数的。 了解 connect 的第五个参数是非常重要的。其中 Qt::UniqueConnection 是比较特殊的,它仅仅用于 connect 的在两个对象之间一个

    2024年02月12日
    浏览(32)
  • QT tableWidget的简单使用

    1、不能对表格内容进行修改 设置某一列不可编辑 2、设置表格为整行选择 3、设置隐藏表头和列头 隐藏列 4、加入控件 5、列可扩展 6、单元格字体居中 7、获取行数和列数 8、右键使能,在给widget加菜单时,需要加入此行代码 9、给QTableWidget添加控件 10、获取当前点击的控件在

    2024年02月13日
    浏览(46)
  • Qt Installer Framework 简单使用

    1.先打包好自己撰写的应用程序 2.到官网下载Qt Installer Framework Qt Installer Framework 下载完以后直接安装,这边我安装再D盘,安装完成如下所示 如果不知道如何发行自己撰写的应用程序,请参考我的这篇文章 qt 发布、打包、发行软件(*.exe) 譬如,我这边准备好了我的应用程序

    2024年02月07日
    浏览(35)
  • 单例的例子

    2024年02月07日
    浏览(32)
  • 如何证明Servlet是单例的?

    Servlet是web体系里面最重要的部分,下面罗列几道常见的面试题,小伙伴们一定要好好记住哈。 Servlet一般都是单例的,并且是多线程的。如何证明Servlet是单例模式呢?很简单,重写Servlet的init方法,或者添加一个构造方法。然后,在web.xml中配置。如: 然后是MyServlet 启动Tom

    2024年02月06日
    浏览(55)
  • 使用QT制作一个简单的登录-注册界面

    1、作业需求   2、实现过程 1)Widget.h文件 2)Widget.cpp文件

    2024年02月11日
    浏览(45)
  • Qt所有容器之间的区别,以及如何简单使用?

    Qt中常用的容器有 QList、QVector、QMap、QHash、QSet 等,它们都具有不同的特性和适用场景。 1. QList:动态数组,可以动态增加和删除元素,支持随机访问和迭代,适用于不需要频繁插入或删除元素的场景。 ```cpp QListint list; list.append(1); list.append(2); foreach(int val, list) {     qDebug()

    2024年01月19日
    浏览(36)
  • Qt中多ui使用及简单布局实现交互界面

    第一章 Qt中C++代码搭配UI文件实现交互界面 第二章 Qt中多ui使用及简单布局实现交互界面 文章目录 前言 一、新增两个新UI文件 二、使用这两个新增的UI及简单布局 三.添加简单联动逻辑 四.编译运行及动态效果展示 总结         前一段时间,写了一篇关于Qt中C++代码搭配

    2024年02月04日
    浏览(56)
  • Spring为什么默认是单例的?

    目录 一、五种作用域 二、单例bean与原型bean的区别  三、单例Bean的优势与劣势 一、五种作用域 1.singleton: singleton是Spring Bean的 默认作用域 ,也就是单例模式。在整个应用程序中,只会创建一个实例,Bean的所有请求都会共享这个实例。 2.prototype: prototype表示 原型模式 ,每次

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包