QT隐含共享类 QSharedData QSharedDataPointer

QT中很多类都实现了隐含共享例如QString,QByteArray等,(这两个并没有使用QSharedData和QSharedDataPointer来实现隐含共享),但是QT的确提供了一套隐含共享机制的类QSharedData和QSharedDataPointer。核心原理是隐含共享数据指针(QSharedDataPointer重载->操作来控制所有对QSharedData数据对象的访问,确保统一的访问接口,来控制数据变化的时候,将QSharedData的原子引用计数清零。如下是我编写的示例代码。

//将所有需要共享的数据封装在SharedData中

class SharedData : public QSharedData

{

public:

int m_bigData;

};

//隐含共享类

class ImplicityClass

{

void setData(int d);

private:

SharedData m_ptr;

};

void ImplicityClass::setData(int d)

{

//核心功能,实现->操作符的重载,来确保所有对共享数据修改的时候,从共享数据中分离。

m_ptr->m_bigData = d;

}

//示例代码

ImplicityClass ic1; //引用计数为1

ImplicityClass ic2 = ic1; //引用计数为2

QT隐含共享类 QSharedData QSharedDataPointer

时间: 2024-08-25 15:10:00

QT隐含共享类 QSharedData QSharedDataPointer的相关文章

【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

递归汉诺塔 双层递归 #include <iostream> void han(int n, char A, char B, char C) { static int num = 1; std::cout << "第" << num << "次"; num++; if (n<1) { return; } else { han(n - 1, A, C, B); std::cout << A <&l

QT中共享库的生成与使用

一. 静态库的生成1. 测试目录: lib2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm in class MyWindow";3. 编写项目文件: mywindow.pro注意两点:TEMPLATE = libCONFIG += staticlib4. 生成Makefile:qmake5. 编译生成静态库libmywindow.amake 二. 静态库的使用1. 测试目录: test2.

Web服务器管理系列:11、注意默认的隐含共享

安装完Windows Server 2008之后默认的c/d/e...磁盘是共享的. 我们可以通过取消"Microsoft网络的文件和打印机共享"服务来阻止别人访问我们的共享文件: Web服务器管理系列:11.注意默认的隐含共享,布布扣,bubuko.com

用 Qt 的 QAudioOutput 类播放 WAV 音频文件

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

用 Qt 的 QAudioOutput 类播放 WAV 音频文件(使用了libsndfile外部库)

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

QT 操作excel 类封装

1 # pro file 2 [plain] view plaincopy 3 CONFIG += qaxcontainer 4 5 QT += core 6 7 QT -= gui 8 9 TARGET = QExcel 10 CONFIG += console 11 CONFIG -= app_bundle 12 13 TEMPLATE = app 14 15 16 SOURCES += main.cpp \ 17 qexcel.cpp 18 19 HEADERS += \ 20 qexce

QT之字符串类

前面我们讲解了开发计算器的信号处理机制,接下来我们来讲讲关于字符串显示的问题. 我们都知道 C 语言不支持真正意义上的字符串:C 语言是用字符数组和一组函数来实现字符串操作的:C 语言不支持自定义类型,因此我们无法获得字符串类型.从 C 到 C++ 的进化过程引入了自定义类型,在 C++ 中可以通过类完成字符串类型的定义.C++ 中的STL标准库又是怎么一回事呢?STL是意义上需要与 C++ 一同发布的标准库,它是一套以模板技术完成的 C++ 类库,包含了常用的算法和数据结构,同样也包含了字符串

Qt中QScrollArea类的简单使用心得

       平台:windows 64位        Qt版本:5.5.1 MinGW 32bit 根据自己目前的需求简单说下怎么在QScrollArea滚动窗口中实现多个控件的滚动显示,先看看最终效果: 先说一下在QScrollArea滚动窗口中要添加控件要使用QScrollArea::setWidget(QWidget * widget)这个函数,当添加的控件显示范围大于scrollArea则会出现滚动条,但是从名字可以看出这个函数是用于设置一个QWidget,而不能用于不断的添加QWi

Qt国际化相关类(以前没见过codec-&gt;toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())

QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS或 ISO 2022-JP进行存储,然而俄国用户的文档是以KOI8-R 或 Windows-1251编码的. Qt提供一组QtextCodec类来实现非Unicode 和Unicode 格式之间的转换.你也可以创建自己的编码解码器. 支持的编码如下: ·        Apple Roman ·