QT中私有公有化(Q_DECLARE_PUBLIC Q_DECLARE_PRIVATE)原理小DEMO

2023-11-08

结果:

b.ljtcnt() 8889

b.ljtcnt() 1457

代码如下:

DrawToolButton.h:
#ifndef DrawToolButton_H
#define DrawToolButton_H

#include <QToolButton>

class DrawToolButtonPrivate;
class DrawToolButton
{
public:
    DrawToolButton(QWidget *parent=0);
    ~DrawToolButton();//析构函数必须把定义放到CPP中 否则编译通不过
    Q_PROPERTY(int txcnt READ txcnt WRITE settxcnt)
    int txcnt() const;
    void settxcnt(int i);
private:
    QScopedPointer<DrawToolButtonPrivate> d_ptr;

    Q_DISABLE_COPY(DrawToolButton)
    Q_DECLARE_PRIVATE(DrawToolButton)
};

#endif

DrawToolButton.cpp:
#include "DrawToolButton.h"
#include <qobject.h>

class DrawToolButtonPrivate
{
    Q_DECLARE_PUBLIC(DrawToolButton)
    inline DrawToolButtonPrivate()
        : q_ptr(0)
    {}
public:
    int prljltcnt;
    void init();
private:
    DrawToolButton *q_ptr;
};

void DrawToolButtonPrivate::init()
{
    Q_Q(DrawToolButton);
    prljltcnt = 8889;
}

DrawToolButton::DrawToolButton(QWidget * parent)
: d_ptr(new DrawToolButtonPrivate)
{
    d_ptr->q_ptr = this;

    Q_D(DrawToolButton);
    d->init();
}

DrawToolButton::~DrawToolButton()
{
<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#808bed;">delete</span><span style=" color:#646482;"> </span><span style=" font-weight:600;">d_ptr</span><span style=" color:#cfbfad;">;</span>
    d_ptr = NULL;
}int DrawToolButton::txcnt() const{ Q_D(const DrawToolButton); return d->prljltcnt;}void DrawToolButton::settxcnt(int i){ Q_D(DrawToolButton); if (d->prljltcnt == i) return; d->prljltcnt = i;}调用:DrawToolButton b; qDebug()<<"b.ljtcnt()"<<b.txcnt(); b.settxcnt(1457); qDebug()<<"b.ljtcnt()"<<b.txcnt();
 另外一种方案: 

DrawToolButton.h:
#ifndef DrawToolButton_H
#define DrawToolButton_H

#include <QToolButton>

class DrawToolButtonPrivate;
class DrawToolButton : public QToolButton
{
    Q_OBJECT
public:
    DrawToolButton(QWidget *parent=0);
    ~DrawToolButton();//析构函数必须把定义放到CPP中 否则编译通不过
    Q_PROPERTY(int txcnt READ txcnt WRITE settxcnt)
    int txcnt() const;
    void settxcnt(int i);
private:
    QScopedPointer<DrawToolButtonPrivate> d_ptr;

    Q_DISABLE_COPY(DrawToolButton)
    Q_DECLARE_PRIVATE(DrawToolButton)
};

#endif
DrawToolButton.cpp:
#include "DrawToolButton.h"
#include <qobject.h>

class DrawToolButtonPrivate
{
    Q_DECLARE_PUBLIC(DrawToolButton)
    inline DrawToolButtonPrivate()
        : q_ptr(0)
    {}
public:
    int prljltcnt;
    void init();

    void aboutToDestroy() {}
private:
    DrawToolButton *q_ptr;
};

void DrawToolButtonPrivate::init()
{
    Q_Q(DrawToolButton);
    prljltcnt = 8889;
}

DrawToolButton::DrawToolButton(QWidget * parent)
   : d_ptr(new DrawToolButtonPrivate)
{
    d_ptr->q_ptr = this;

    Q_D(DrawToolButton);
    d->init();
}

DrawToolButton::~DrawToolButton()
{

}

int DrawToolButton::txcnt() const
{
    Q_D(const DrawToolButton);
    return d->prljltcnt;
}

void DrawToolButton::settxcnt(int i)
{
    Q_D(DrawToolButton);
    if (d->prljltcnt == i)
        return;

    d->prljltcnt = i;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT中私有公有化(Q_DECLARE_PUBLIC Q_DECLARE_PRIVATE)原理小DEMO 的相关文章

  • 立即放弃 TypeScript 的 17 个理由

    如果你和我一样 你可能会因为被迫而使用 Typescript 你的公司决定它会成为未来的语言 所以你被迫学习它 起初 您很高兴使用 Typescript 你知道它有很大的潜力 可以帮助你制作更强大的应用程序 但在使用了一段时间后 您开始意识
  • 微博登录和session恢复过程

    微博登录和session恢复过程 登录 预登录 获取验证码 登录 密码密文sp计算 登录请求 跨域广播登录 解决cookie设置不上的问题 跨域广播之后 恢复session 完整源码参考我的pixiv to weibo项目 只实现了核心部分
  • cygwin开发环境搭建与apt-cyg的应用

    1 Cygwin安装 http www cygwin com 下载安装工具 具体安装过程参照http jingyan baidu com article 6b97984d83dfe51ca2b0bf0e html 2 Cygwin一些设置
  • 使用Arduino开发板控制伺服电机

    大多数情况下 直流电机控制的控制方法都是非常简单的 只需要连接电源和地 伺服电机有一些不同 它使用3根线连接 电源 地和信号 将电机移动到某个旋转位置 该位置由信号线上发送的信号决定 一旦电机到达信号指定的位置 它将保持其位置 并抵抗试图将
  • 利用GPU预热以及同步执行正确计算卷积神经网络推理性能【附代码】

    我们在评价一个卷积神经网络模型性能好坏时 通常会用AP mAP来判断分类准确性 针对速度方面经常使用ms 毫秒 或者FPS 表示每秒处理多少张图像 或者说处理一张图像用多少秒 在看一些代码的时候 常常会看到是直接用python中的time函
  • docker 镜像的复制和导入

    1 复制 docker save o 要保存的文件名 要保存的镜像 docker save o d docker images fastdfs tar zl fastdfs 2 导入 docker load input 文件 docker
  • mysql数据库的安装和卸载(windows10)

    数据库安装 官网下载ZIP压缩包 解压到D MySQL mysql 5 6 40 winx64 打开刚刚解压的文件夹 D MySQL mysql 5 6 40 winx64 里面有一个系统自带的配置文件 my default ini 复制该
  • android ndk NEON Support

    NEON Support On this page Using LOCAL ARM NEON Using the neon Suffix Build Requirements Runtime Detection Sample Code Th
  • 从技术的角度Struts1.1与WebWork2的比较

    从技术的角度Struts1 1与WebWork2的比较 标签 action webwork struts 拦截器 验证 从技术的角度Struts1 1与WebWork2的比较 特 征 Struts1 1 WebWork2 Action类 在
  • rootkit模拟木马病毒

    Rootkit是一种特殊的恶意软件 它的功能是在安装目标上隐藏自身及指定的文件 进程和网络链接等信息 比较多见到的是Rootkit一般都和木马 后门等其他恶意程序结合使用 而我们今天要模拟学习的就是与它很像的恶意软件 Rootkit 其中之
  • 【难受】SpirngBoot-Alibaba-nacos跨服务器访问接口的问题

    原想法 我首先准备了 一个网关 2个服务 分别将两个服务部署到不同的远程服务器当中 实现跨服务器访问接口 网关为本地调用 这里就不一一介绍了 问题 利用gateway做路由时出现服务不可用的情况 看日志发现服务调用的IP是172开头的网卡段
  • Sqoop安装与配置

    Sqoop安装与配置 一 了解Sqoop 二 下载Sqoop安装包 三 安装Sqoop 四 配置Sqoop 五 Sqoop基本命令 六 示例 一 了解Sqoop sqoop 是 Hadoop 和关系数据库服务器之间传送数据的工具 主要用于在
  • centos7 kafka安装并安装web界面监控工具

    kafka自带zookeeper 所以不需要下载zookeeper 1 下载 wget http mirrors shu edu cn apache kafka 2 0 0 kafka 2 12 2 0 0 tgz 2 安装 tar zxv
  • ACMP,二维狄洛尼三角剖分

    ACMP cpp std vector
  • python爬虫文字加密_Python爬虫进阶必备

    此次来分析某个小说网站 aHR0cHM6Ly9nLmhvbmdzaHUuY29tL2NvbnRlbnQvOTM0MTYvMTM4Nzc5MTIuaHRtbA node 分析请求 先来看看页面的请求 图1 1 数组 图1 1 通过查看请求 并
  • Error creating bean with name ‘org.apache.cxf.jaxws.spring.NamespaceHandler$SpringServerFactoryBean

    目录 问题描述 解决过程 总结 问题描述 我是在spring整合jaxws 使用webservice的时候报错的 解决过程 这个问题说实话卡了我很久 一直没找着原因 其实但看这个报错就能看出来 有个文件注入不了容器 我一直以为是配置问题 修
  • 强化学习代码练习q-learning-迷宫

    相比上一个demo 这个练习的环境更加复杂 但是就强化学习智能体而言 其整体是一样的 但是既然环境更加复杂 就需要把智能体和环境单独拉出来写 不能再放一个Python文件中 环境类 环境类总结起来就是定义了初始化的参数 构建迷宫 重置函数
  • 设计模式C++学习笔记之一(Strategy策略模式)

    http www cnblogs com wanggary archive 2011 04 07 2008796 html 无意中 从网上下到一本电子书 24种设计模式介绍与6大设计原则 很好奇这里有24种设计模式 印象中GOF写的 设计模
  • CTFSHOW网络迷踪-低碳环保

    记录一个解过的一道OSINT题目 低碳环保 题目来源 CTFshow 题目 解题 先下载附件 得到如图 首先尝试百度识图 但是识别不到 然后我看到右边建筑上方有 奉献清洁能源 几个红字 尝试搜索 搜索到了各种公司 还是没头绪 但是经过观察
  • 租车骑绿岛【C语言】

    租车骑绿岛 部门组织绿岛骑行团建活动 租用公共双人自行车 每辆自行车最多坐两人 最大载重m 给出部门每个人的体重 请问最多需要租用多少双人自行车 输入描述 第一行两个数字m n 分别代表自行车限重 部门总人数 第二行 n个数字 代表每个人的

随机推荐

  • JPA freemaker动态的拼接SQL

    spring data jpa extra https github com slyak spring data jpa extra spring data jpa template 项目地址 https gitee com silentw
  • cJSON解析JSON字符串

    一 为何选择cJSON 我们在使用JSON格式时 如果只是处理简单的协议 可以依据JSON格式 通过对字符串的操作来进行解析与创建 然而随着协议逐渐复杂起来 经常会遇到一些未考虑周全的地方 需要进一步的完善解析方法 此时 使用比较完善的JS
  • <>读书笔记

    lt
  • MySQL+jdbc理论考试【无答案】

    单选 共15题 每题2分 共30分 1 下面关于mysql的说法正确的是 A 默认的端口号是1521 B 默认的端口号是80 C 默认的端口号是3306 D 默认的端口号是443 2 下面排序的说法正确的是 A 默认是升序排序 B asc是
  • Hbuild点击发行,没有反应

    根目录下有 manifest json pages json 等等 才可以打包 换句话说 打开uniapp的文件时 要打开目录下有manifest json pages json的文件 文件上层不要再套一层文件
  • Linux内核移植

    目录 创建VSCode 工程 NXP官方开发板Linux 内核编译 修改顶层Makefile 配置并编译Linux内核 生成zImage和 dtb Linux 内核启动测试 根文件系统缺失错误 在Linux中添加自己的开发板 添加开发板默认
  • matlab仿真gmid电路,bandgap电路稳定性仿真---频响、相位裕度、环路增益

    仿真需要对原理图稍作修改 需在运放的闭环路径中加入iprobe元件 电路中存在两个反馈电路 一个正反馈 如图1组成路径 一个负反馈 如图2组成路径 两个反馈都经过了运放的输出端 故我这儿加在了输出端 可以同时仿真出两个反馈环路的频率响应 环
  • spring boot2整合kafka及遇到Exception thrown when sending a message with key='null'问题

    spring boot2整合kafka及遇到Exception thrown when sending a message with key null 问题 最近在学习spring boot2和kafka 就用学着使用spring boot
  • SpringBoot之CommandLineRunner接口和ApplicationRunner接口

    我们在开发中可能会有这样的情景 需要在容器启动的时候执行一些内容 比如读取配置文件 数据库连接之类的 SpringBoot给我们提供了两个接口来帮助我们实现这种需求 这两个接口分别为CommandLineRunner和Application
  • SQL技巧:如何统计博客每天的总点击量和每天的总点击人数

    最近由于工作安排 需要统计一篇火爆的博客每天的总点击量和每天的总点击人数 其实主要考验的就是编写SQL的能力 这里我们需要用到 GROUP BY 和 COUNT关键字 关于这2个关键字的用法 网上有很多 这里不再赘述 分组统计每天的总点击量
  • Qt之QtSoapHttpTransport 访问WebService

    简述 Web Service技术 能使得运行在不同机器上的不同应用无须借助附加的 专门的第三方软件或硬件就可相互交换数据或集成 依据Web Service规范实施的应用之间 无论它们所使用的语言 平台或内部协议是什么 都可以相互交换数据 Q
  • win10 安装mingw 使用makefile

    下载了一个新代码 里面有 h c 和 Makefile文件 说明文件中写道先编译 compiling Type make in a shell 在控制台上输入make 首先win r打开控制台 输入cmd 输入e 回车 cd github
  • mybatis查询返回空,sql数据库执行有数据

    需要编写一个统计功能 在Navicat Premium里调整好sql 然后编写后台代码 controller service serviceImpl dao 在serviceImpl 上添加 Service 注解 在dao 添加 Repos
  • 【测试 3】三、软件测试方法

    4 软件测试方法 包括白盒测试 灰盒测试 黑盒测试 静态测试 动态测试 手动测试 自动测试等 学习目标 熟悉白盒测试方法 掌握黑盒测试方法 掌握黑盒测试用例设计的方法 等价类划分法 边界值分析法 因果 图分析法 判定表分析法 正交试验法等
  • 图像特征提取三大算法:HOG特征,LBP特征,Haar特征

    一 HOG特征 from http dataunion org 20584 html 1 HOG特征 方向梯度直方图 Histogram of Oriented Gradient HOG 特征是一种在计算机视觉和图像处理中用来进行物体检测的
  • Intellij IDEA运行报Command line is too long的解决办法

    报错信息大概如下 Error running xxx Command line is too long Shorten command line for xxx or also for Application default configu
  • leet116. 每个节点的右向指针

    题目 给定一个二叉树 struct TreeLinkNode TreeLinkNode left TreeLinkNode right TreeLinkNode next 填充他的每个 next 下一个 指针 让这个指针指向其下一个右侧节点
  • Mybatis-Plus-【通俗易懂全讲解】

    Mybatis Plus 简介 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率
  • 08-go mod和vendor

    文章目录 1 go mod 1 1 创建项目 1 2 mod初始化 1 3 重新构建依赖 1 4 编译 2 vendor 2 1 拷贝依赖 2 2 使用vendor目录编译 1 go mod 1 1 创建项目 创建一个目录 root liu
  • QT中私有公有化(Q_DECLARE_PUBLIC Q_DECLARE_PRIVATE)原理小DEMO

    结果 b ljtcnt 8889 b ljtcnt 1457 代码如下 DrawToolButton h ifndef DrawToolButton H define DrawToolButton H include