从QObject类及非QObject类实现多继承,需把QObject放在继承链最前面

在开发中,有时需要实现多继承,如下定义了一个抽象类作为接口:

// 接收CAN数据接口类#ifndef _RECVCANDATA_INTERFACE_H
#define _RECVCANDATA_INTERFACE_H#include"cansocketlinux.h"
class CRecvCanDataInterface
{public: // virtual blockvirtual bool parseFrame(const CanFrame& frame) = 0;};#endif // _RECVCANDATA_INTERFACE_H

对于本博文代码,读者可不必关心CanFrame类,CanFrame类不影响本博文技术的阐述,如下定义 CRecvChargeCabinetCanData类:

#ifndef RECVCHARGECABINETCANDATA_H
#define RECVCHARGECABINETCANDATA_H
#include"recvCanDataInterface.h"
#include<QObject>class CRecvChargeCabinetCanData : public CRecvCanDataInterface, public QObject
{Q_OBJECT
public:CRecvChargeCabinetCanData(QObject*pParent = nullptr);~CRecvChargeCabinetCanData();public: // virtual blockvirtual bool parseFrame(const CanFrame& frame) override;
};#endif // RECVCHARGECABINETCANDATA_H

CRecvChargeCabinetCanData类重载了CRecvCanDataInterface接口的parseFrame函数,且派生自QObject,不幸的是,编译报如下错误:

解决上述错误的方法是:更改多继承父的顺序,将QOjbect放在第1父的位置,即改为如下那样: 

#ifndef RECVCHARGECABINETCANDATA_H
#define RECVCHARGECABINETCANDATA_H
#include"recvCanDataInterface.h"
#include<QObject>class CRecvChargeCabinetCanData : public QObject, public CRecvCanDataInterface
{Q_OBJECT
public:CRecvChargeCabinetCanData(QObject*pParent = nullptr);~CRecvChargeCabinetCanData();public: // virtual blockvirtual bool parseFrame(const CanFrame& frame) override;
};#endif // RECVCHARGECABINETCANDATA_H

在Qt自己实现的插件技术(如QPluginLoader、QSqlDriverPlugin、QIconEnginePlugin、QAccessiblePlugin、QStylePlugin)中,大量用到了这种多继承,具体可以参考:

Qt安装目录\Examples\Qt-X.YY.Z\widgets\tools\plugandpaint\plugins

目录下的Qt官方自带的例子,其中,X.YY.Z表示Qt的版本号,如:5.14.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415486.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邮政快递查询,邮政快递单号查询,筛选出指定派件员的单号

面对堆积如山的快递单号&#xff0c;手动筛选、整理既费时又容易出错。现在有了【快递批量查询高手】&#xff0c;这些问题都会迎刃而解。这款软件具备强大的筛选功能&#xff0c;可以根据更新量、派件员、发货时间等条件进行筛选&#xff0c;快速找到目标单号&#xff0c;提高…

Linux快速部署文件服务器

参考文档&#xff1a; Linux命令之nohup详解 - 掘金 【Linux】ps -ef|grep详解-CSDN博客 有个简单想法&#xff0c;我的一些文件放在机器某个目录下面&#xff0c;可以简单提供团队内部人员浏览和下载功能&#xff0c;节约时间&#xff0c;用最简单方法实现。 注&#xff1a;…

每周一算法:数独游戏

题目链接 数独游戏 题目描述 数独是根据 9 9 9 \times 9 99 盘面上的已知数字&#xff0c;推理出所有剩余空格的数字&#xff0c;并满足每一行、每一列、每一个粗线宫内的数字均含 1 − 9 1 - 9 1−9 &#xff0c;不重复。每一道合格的数独谜题都有且仅有唯一答案&#x…

2024年【裂解(裂化)工艺】考试题及裂解(裂化)工艺免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 裂解&#xff08;裂化&#xff09;工艺考试题参考答案及裂解&#xff08;裂化&#xff09;工艺考试试题解析是安全生产模拟考试一点通题库老师及裂解&#xff08;裂化&#xff09;工艺操作证已考过的学员汇总&#xf…

统计学-R语言-6.2

文章目录 前言总体均值的区间估计两个总体均值之差的估计两个总体均值之差的估计&#xff08;独立大样本的估计&#xff09;两个总体均值之差的估计&#xff08;独立小样本的估计&#xff09;两个总体均值之差的估计&#xff08;配对样本的估计&#xff09; 总体比例的区间估计…

JS-事件

事件是在编程时系统内发生的动作或者发生的事情 事件监听&#xff08;绑定&#xff09; 事件监听就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应&#xff0c;也称为绑定事件或者注册事件 元素对象.addEventListener(事件类…

【每日一题】2809. 使数组和小于等于 x 的最少时间-2024.1.19

题目&#xff1a; 2809. 使数组和小于等于 x 的最少时间 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒&#xff0c;对于所有下标 0 < i < nums1.length &#xff0c;nums1[i] 的值都增加 nums2[i] 。操作 完成后 &#xff0c;你可以进行如下操作&…

西门子WINCC常用C脚本1

1.置位&#xff0c;复位&#xff0c;取反 获取变量值&#xff1a;GetTagBit(可以是位也可以是字节&#xff0c;字&#xff0c;双字等具体字母不同) 设置变量值&#xff1a;SetTagBit 置位&#xff1a;SetTagBit&#xff08;"变量名",1&#xff09; 复位&#xff…

adb、monkey的下载和安装

adb下载 官网网址&#xff1a;Downloads - ADB Shell 尽量不要下载最新的ADB Kits&#xff0c;因为兼容性可能不太好。 点击下载 ADB Kits 作者下载的版本是1.0.36 解压adb 到指定的目录即可。 然后把adb配置 环境变量。 检查adb是否安装成功

vue2 使用vuex状态管理工具 如何配置与搭建。

等我研究研究&#xff0c;下一期给大家出一个后台管理左侧侧边栏如何搭建的。 首先我们先下载一下 vuex包 yarn add vuex3 1.先导入我们需要的 Vue 和 vuex 2.注册vuex 3.创建vuex实例 4.导出store export default store 5.在main.js中导入并挂载到全局。 Vuex如何实…

视频增强修复Topaz Video AI

Topaz Video AI是一款强大的视频增强软件&#xff0c;利用人工智能技术对数千个视频进行训练&#xff0c;结合多个输入视频的帧信息来提高素材的分辨率。该软件可将视频的分辨率提高到最高8K&#xff0c;并保持真实的细节和运动一致性。同时&#xff0c;它还能自动修复视频中的…

树形+分页+表格

一.树形结构的增加和删除 1.树形结构的增加 传入上一层的pid 2.树形结构的删除 传入当前项的id 3.列表刷新 每做一次增加和删除都需要调用,获取列表的接口来刷新列表里面的数据,并且关闭弹窗 二.表格的使用 这些element-ui官方网站都可以进行查询。 这里面需要注意的点…