Qt里面的一些细节

QDir的mkdir和mkpath区别


mkdir:上层目录不存在时,创建会失败。比如创建“c:\\test\test”,如果test不存在,那test也创建不了。目录已经存在时会返回false。

mkpath:上层目录不存在也没关系,自动一起创建。目录已经存在时会返回true。

Qt中的qreal
摘要: 在桌面操作系统中(比如Windows, XNix等)qreal其实就是double类型;而在嵌入设备系统中,qreal则等同于float 类型

多行注释模式                                                                                            Ctrl+ /  
激活欢迎模式 Ctrl + 1
激活编辑模式 Ctrl + 2
激活调试模式 Ctrl + 3
激活项目模式 Ctrl + 4
激活帮助模式 Ctrl + 5
激活输出模式 Ctrl + 6
查找当前文档 Ctrl + F
查找下一个 F3
查找上一个 Shift + F3
弹出查找对话框 Ctrl + Shift + F
返回到代码编辑状态 Esc
页面之间切换 Alt +左,按Alt +右
自动完成 Ctrl + Space
声明和定义之间切换 F2
头文件和源文件之间切换 F4
隐藏或显示边栏 Alt + 0
切换至生成窗口 Alt + 1
切换至搜索结果窗口 Alt + 2
切换至应用输出窗口 Alt + 3
切换至编译输出窗口 Alt + 4
下一个书签 Ctrl + .
上一个书签 Ctrl + ,
书签之间切换 Ctrl + M
调试 F5
停止调试 Shift+F5
单步跳过 F10
单步进入 F11
单步跳出 Shift + F11
重启调试 Ctrl + Shift + F5
切换断点 F9

Qt的几种MessageBox

1.Infomation类型

QMessageBox::information(this,tr("hello"),tr("title"));

2.Question类型

    QMessageBox::StandardButton returnBtn;
    returnBtn = QMessageBox::question(this,tr("hello have problem?"),tr("error!"),QMessageBox::Yes|QMessageBox::No);
    if(returnBtn==QMessageBox::Yes)
    {
        QMessageBox::information(this,tr("Yes!"),tr("error"));
    }

 

3.Warning类型

QMessageBox::warning(this,tr("warning!"),tr("warning!"));

 

4.自定义类型

    QMessageBox msg;
    msg.setText("customer!");
    msg.setWindowTitle(tr("titleHaHa"));
    msg.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
    msg.exec();



QAtomicInit 是 Qt 提供的一个用于原子初始化的类模板,通常用于实现线程安全的延迟初始化(lazy initialization)。该类模板定义在 `<QtGlobal>` 头文件中,适用于各种需要在多线程环境下保证初始化过程原子性的场景。 `load` 方法是 QAtomicInit 的核心方法之一,用于获取已初始化的对象实例。如果对象尚未初始化,则会调用提供的初始化函数来完成初始化操作。此方法确保即使在多线程环境中,初始化操作也只会执行一次,并且所有线程都能看到一致的结果。 ### 使用示例 以下是一个简单的使用示例,展示了如何通过 `QAtomicInit` 和 `load` 方法实现线程安全的单例模式: ```cpp #include <QtGlobal> #include <QDebug> class Singleton { public: static const Singleton& instance() { return atomicInstance.load(initInstance); } private: Singleton() { qDebug() << "Singleton constructed"; } static Singleton* initInstance() { return new Singleton(); } static QAtomicInit<Singleton> atomicInstance; }; QAtomicInit<Singleton> Singleton::atomicInstance; int main() { const Singleton& s1 = Singleton::instance(); const Singleton& s2 = Singleton::instance(); return 0; } ``` 在此示例中,`atomicInstance` 是一个静态的 `QAtomicInit<Singleton>` 实例,`instance()` 方法通过调用 `load` 并传入初始化函数 `initInstance` 来获取单例对象。`load` 方法确保 `initInstance` 仅被调用一次,并且所有后续调用都将返回相同的实例。 ### 实现细节 `QAtomicInit` 的实现依赖于底层的原子操作和互斥机制,以确保初始化过程的线程安全性。具体来说,`load` 方法内部使用了类似于“双重检查锁定”(Double-Checked Locking)的模式来减少锁的竞争开销。其大致流程如下: 1. 首先检查对象是否已经初始化(无锁)。 2. 如果对象未初始化,则进入锁定状态,并再次检查对象是否已经初始化(防止其他线程在此期间完成了初始化)。 3. 如果确实未初始化,则调用用户提供的初始化函数来创建对象。 4. 最后返回已初始化的对象。 这种设计不仅保证了线程安全性,还避免了在每次访问时都加锁所带来的性能损耗。 此外,`QAtomicInit` 的 `load` 方法接受一个可调用对象(如函数指针、lambda 表达式等),允许用户自定义初始化逻辑。这使得 `QAtomicInit` 可以灵活地应用于不同的场景。 ### 总结 `QAtomicInit` 的 `load` 方法提供了一种简洁且高效的机制,用于在 Qt 中实现线程安全的延迟初始化。通过结合原子操作和轻量级锁机制,它能够在多线程环境下确保对象的初始化仅执行一次,并且所有线程都能看到一致的状态。这种特性使其非常适合用于实现单例模式、缓存机制以及其他需要延迟加载的场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值