error: C2039: “qt_metacast“: 不是 “***“ 的成员
报错信息:
error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员
最近在使用Qt开发,自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员”。
数据描述:
抽象数据类:
//
// Created by qiaowei on 2023-12-17.
//#ifndef RADARDATACONTROLLER_BASE_TRACK_DATA_H
#define RADARDATACONTROLLER_BASE_TRACK_DATA_H#include <QObject>
#include <QString>namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date 2023-12-18* @author qiao wei* @version 1.0* @brief 雷达数据接口。* @history*********************************************************************************************/class Base_track_data {public:virtual void set_track_data(const QString& qstring_format_track_data) = 0;virtual QString qstring_format_track_data() = 0;virtual QMap<QString, QString>* qmap_format_track_data() = 0;};} // radartrack#endif //RADARDATACONTROLLER_BASE_TRACK_DATA_H
//
// Created by qiaowei on 2023-12-17.
//#include "base_track_data.h"namespace radartrack {
} // radartrack
数据类:
//
// Created by qiaowei on 2023-12-14.
//#ifndef RADARDATACONTROLLER_TRACK_DATA_H
#define RADARDATACONTROLLER_TRACK_DATA_H#include <QObject>
#include <QMap>
#include "base_track_data.h"using radartrack::Base_track_data;namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 雷达数据类。以QString和QMap两种格式保存雷达数据,雷达数据类将读入的QString格式数据处理为* QMap格式并保存。* @history*********************************************************************************************/class Track_data : public Base_track_data, public QObject {Q_OBJECTpublic:/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Constructor。创建实例时传入QString格式雷达数据track_data和参数parent,调用函数,将* QString格式雷达数据处理为QMap格式雷达数据并保存。* @param qstring_format_track_data QString格式雷达数据。* @param parent 父类参数。* @return* @throws*****************************************************************************************/explicit Track_data(QString qstring_format_track_data, QObject* parent = nullptr);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Copy constructor。* @param right_value 赋值的TrackData变量。* @return* @throws*****************************************************************************************/explicit Track_data(const Track_data& right_value);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Assignment operator=。* @param right_value 赋值的TrackData变量。* @return 赋值后的变量。* @throws*****************************************************************************************/Track_data& operator=(const Track_data& right_value);virtual ~Track_data() override;/******************************************************************************************* @date 2023-12-17* @author qiao wei* @version 1.0* @brief 根据传入的字符串,设置QString格式雷达数据,QMap格式雷达数据。* @param qstring_format_track_data 传入的QString格式雷达数据。* @return* @throws*****************************************************************************************/virtual void set_track_data(const QString& qstring_format_track_data);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 返回QString格式雷达数据。* @param* @return QString格式雷达数据。* @throws*****************************************************************************************/virtual QString qstring_format_track_data() const;/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 返回QMap格式雷达数据。* @param* @return QMap格式雷达数据。* @throws*****************************************************************************************/virtual QMap<QString, QString>* qmap_format_track_data() const;private:/******************************************************************************************* @date 2023-12-17* @author qiao wei* @version 1.0* @brief 根据传入的QString格式雷达数据,更新QMap格式雷达数据(如原雷达数据不为空,先删除过期* 的雷达数据)。* @param qstring_format_track_data QString格式雷达数据。* @return* @throws*****************************************************************************************/void updateTrackDataInQMapByQString(const QString& qstring_format_track_data);private:/******************************************************************************************* @date 2023-12-14* @author qiao wei* @brief 字符串格式雷达数据。*****************************************************************************************/QString qstring_format_track_data_;/******************************************************************************************* @date 2023-12-17* @author qiao wei* @brief 分析后的雷达数据,保存在QMap类型中。*****************************************************************************************/QMap<QString, QString>* qmap_format_track_data_;};} // radartrack#endif //RADARDATACONTROLLER_TRACK_DATA_H
//
// Created by qiaowei on 2023-12-14.
//#include "track_data.h"
#include "constant_variable.h"using radartrack::kNone;
using radartrack::kTime;namespace radartrack {Track_data::Track_data(QString qstring_format_track_data,QObject* parent) :QObject(parent),qstring_format_track_data_{qstring_format_track_data},qmap_format_track_data_{new QMap<QString, QString>} {updateTrackDataInQMapByQString(qstring_format_track_data_);}Track_data::Track_data(const Track_data& right_value) {if (this != &right_value) {qstring_format_track_data_ = right_value.qstring_format_track_data_;updateTrackDataInQMapByQString(qstring_format_track_data_);}}Track_data& Track_data::operator=(const Track_data& right_value) {if (this == &right_value) {return *this;}qstring_format_track_data_ = right_value.qstring_format_track_data_;updateTrackDataInQMapByQString(qstring_format_track_data_);return *this;}Track_data::~Track_data() {// 释放实例变量的指针资源。delete qmap_format_track_data_;qmap_format_track_data_ = nullptr;}void Track_data::set_track_data(const QString& qstring_format_track_data) {// 更新QString格式和QMap格式的雷达数据。qstring_format_track_data_ = qstring_format_track_data;updateTrackDataInQMapByQString(qstring_format_track_data);}QString Track_data::qstring_format_track_data() const {return qstring_format_track_data_;}QMap<QString, QString>* Track_data::qmap_format_track_data() const {return qmap_format_track_data_;}void Track_data::updateTrackDataInQMapByQString(const QString& qstring_format_track_data) {// 获取文本格式的时间数据,将时间数据保存到map变量。QString data_time{qstring_format_track_data.mid(0, 8)};// 检查qmap_format_track_data_变量是否为空,如果不为空,使用clear函数清空数据。if (!qmap_format_track_data_->isEmpty()) {qmap_format_track_data_->clear();}qmap_format_track_data_->insert(kTime, data_time.trimmed());// 获取剩余的雷达数据。QStringList string_list = qstring_format_track_data.mid(11).split(",");QStringList key_value_group;// 遍历QString格式的雷达数据,保存到map变量中。QStringList::Iterator iterator = string_list.begin();while (string_list.end() != iterator) {if (iterator->contains("=")) {key_value_group = iterator->split("=");if (2 == key_value_group.count()) {if (key_value_group[1].isEmpty()) {key_value_group[1] = kNone;}// 将key/value保存到QMap中,去除数据的空格。将航班号的方括号去除。qmap_format_track_data_->insert(key_value_group[0].trimmed(),key_value_group[1].trimmed().replace("[", "").replace("]", ""));}}++iterator;}}} // radartrack
添加Q_OBJECT宏时在编译数据类时就出现了本文最开始的问题,去掉Q_OBJECT宏时可以成功编译。
原因分析:
导致错误的原因可能是多继承时,继承QObject并加入Q_OBJECT宏的时候,QT环境下在编译的时候会以第一个继承的对象(模板?)来生成对应的moc文件,如果带有Q_OBJECT宏,必须把QObject放在第一个继承的位置。
解决方案:
更换数据类Track_data的继承顺序为public QObject, public Base_track_data的位置,成功解决问题。更改后代码如下:
//
// Created by qiaowei on 2023-12-14.
//#ifndef RADARDATACONTROLLER_TRACK_DATA_H
#define RADARDATACONTROLLER_TRACK_DATA_H#include <QObject>
#include <QMap>
#include "base_track_data.h"using radartrack::Base_track_data;namespace radartrack {/*********************************************************************************************** @copyright 2003-2023* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 雷达数据类。以QString和QMap两种格式保存雷达数据,雷达数据类将读入的QString格式数据处理为* QMap格式并保存。* @history*********************************************************************************************/class Track_data : public QObject, public Base_track_data {Q_OBJECTpublic:/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Constructor。创建实例时传入QString格式雷达数据track_data和参数parent,调用函数,将* QString格式雷达数据处理为QMap格式雷达数据并保存。* @param qstring_format_track_data QString格式雷达数据。* @param parent 父类参数。* @return* @throws*****************************************************************************************/explicit Track_data(QString qstring_format_track_data, QObject* parent = nullptr);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Copy constructor。* @param right_value 赋值的TrackData变量。* @return* @throws*****************************************************************************************/explicit Track_data(const Track_data& right_value);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief Assignment operator=。* @param right_value 赋值的TrackData变量。* @return 赋值后的变量。* @throws*****************************************************************************************/Track_data& operator=(const Track_data& right_value);virtual ~Track_data() override;/******************************************************************************************* @date 2023-12-17* @author qiao wei* @version 1.0* @brief 根据传入的字符串,设置QString格式雷达数据,QMap格式雷达数据。* @param qstring_format_track_data 传入的QString格式雷达数据。* @return* @throws*****************************************************************************************/virtual void set_track_data(const QString& qstring_format_track_data);/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 返回QString格式雷达数据。* @param* @return QString格式雷达数据。* @throws*****************************************************************************************/virtual QString qstring_format_track_data() const;/******************************************************************************************* @date 2023-12-14* @author qiao wei* @version 1.0* @brief 返回QMap格式雷达数据。* @param* @return QMap格式雷达数据。* @throws*****************************************************************************************/virtual QMap<QString, QString>* qmap_format_track_data() const;private:/******************************************************************************************* @date 2023-12-17* @author qiao wei* @version 1.0* @brief 根据传入的QString格式雷达数据,更新QMap格式雷达数据(如原雷达数据不为空,先删除过期* 的雷达数据)。* @param qstring_format_track_data QString格式雷达数据。* @return* @throws*****************************************************************************************/void updateTrackDataInQMapByQString(const QString& qstring_format_track_data);private:/******************************************************************************************* @date 2023-12-14* @author qiao wei* @brief 字符串格式雷达数据。*****************************************************************************************/QString qstring_format_track_data_;/******************************************************************************************* @date 2023-12-17* @author qiao wei* @brief 分析后的雷达数据,保存在QMap类型中。*****************************************************************************************/QMap<QString, QString>* qmap_format_track_data_;};} // radartrack#endif //RADARDATACONTROLLER_TRACK_DATA_H
相关文章:
error: C2039: “qt_metacast“: 不是 “***“ 的成员
报错信息: error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员 最近在使用Qt开发,自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员…...
量子计算:开启IT领域的新时代
量子计算:开启IT领域的新时代 一、量子计算的基本原理与背景 量子计算作为一项前沿高级技术,正逐渐引起IT领域的广泛关注。传统计算机是通过二进制位(0和1)来储存和处理信息,而量子计算机则利用量子位或称为“量子比特…...
数据可视化---柱状图
类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...
第十七章 爬虫scrapy登录与中间件2
文章目录 数据盘区太快会报错,setting中配置延迟 连接提取器...
运维知识点-Kubernetes_K8s
Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号,是Pod连接K8s集群的凭证。 在默认情况下,系统会为创建的Pod提供一个默认的Service Account, 用户也可以自定义Service Account,与Service…...
某电子文档安全管理系统存在任意用户登录漏洞
漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞,攻击者可以通过用户名获取对应的cookie,登录后台。 资产测绘 Hunter语法:web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…...
音视频参数介绍
一、视频参数概念 单个视频帧:可以简单地理解成为一张图片 单个视频帧主要的参数概念: 分辨率: 分辨率是指图像或显示器上像素的数量,通常用横向像素数乘以纵向像素数表示。例如,1920x1080 表示宽度为1920像素&…...
vue中使用minio上传文件
创建一个 文件getOssClient import { getOssSetting } from "/api/common"; import Vue from "vue"; import { getCookies, getLocal } from "/utils/auth"; // get token from cookie export async function getStsToken() {//从后台获取stsTo…...
MySQL表的增删改查(初阶)
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查(CRUD,create,retrieve,update,delete)数据库的核心模块。 1. 新增(Create) 实…...
搜维尔科技:关于“第九届元宇宙数字人设计大赛”线上+线下巡回宣讲本周高校行程通告!
为了让大家更全面地了解此次大赛,顺利地进行大赛的报名和参赛,组委会遴选了一批优秀讲师代表,组建了宣讲团,以线上线下的方式陆续开展巡回宣讲。宣讲兼顾不同学生群体的需求,结合在数字人设计制作的过程中常见的疑难点…...
Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!
Gemini 1.0:Google推出的全新AI模型,将改变生成式人工智能领域的游戏规则! 🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 …...
excel打开并操作CAD(excel-vba实现)_另附:CAD打开excel
excelvba可实现调用cad应用程序,并通过excel内置api弹窗实现打开、另存CAD 文件(cad-vba弹窗功能较为麻烦),代码如下(在excel_vba环境下操作): Sub excel_vba打开另存并操作CAD文件() Dim cad …...
Prolist组件实现动态竖排展示
实现原理:主要是利用外层div属性display:"flex",overflowX: auto,配合内层prolist样式属性flex:"0 0 auto",overflowX:"auto",width:"350px",height:900,实现动态竖排展示 <div style{{display:…...
基于JAVA的海南旅游景点推荐系统 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统ÿ…...
【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用
【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1)框架介绍与引入1.1.🚀 什么是 StreamPark1.2.🎉 Features1.3.🏳🌈 组成部分1.4.引入 StreamPark 2)安装部署2.1.环境要求2.2.Hado…...
【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)
00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…...
docker服务启动报错docker.service holdoff time over, scheduling restart.
docker服务启动报错docker.service holdoff time over, scheduling restart. 卸载docker 卸载安装包 yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinu…...
cfa一级考生复习经验分享系列(八)
先分析一下CFA Level 1内容,考试总体难度并不大,每门课程都比大学本科开设的对应课程简单,但是因为有十门课综合在一起,知识点相对算比较多,内容较多。但对知识点的掌握要求不高,理解即可。比如财报&#x…...
React中的事件处理
React中的事件处理 亲爱的同学们,今天我们将一起探索React中的一个非常实用的话题:事件处理。当我们谈论事件处理,我们指的是在用户与我们的应用程序交互时发生的各种情况,比如点击一个按钮或是提交一个表单。这些动作是我们如何让…...
德人合科技 | 公司电脑文件加密系统
公司电脑文件加密系统是一种可以对电脑文件进行加密的保护机制。它使用驱动层透明加密技术,能够在用户无感知的情况下对文件进行加密,从源头上保障数据安全和使用安全。 PC端访问地址: www.drhchina.com 此类系统主要有以下几个特点和功能&a…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
