QT让人纠结的编译错误【积累】

error: C2039: “qt_metacast“: 不是 “DeclareInterface“ 的成员 error: C2039: "qt_metacast": 不是 "DeclareInterface" 的成员 阅读详情

错误一

...: 错误:'staticMetaObject' is not a member of 'Ui_Start_Form'

 ...:错误:'qt_metacast' is not a member of 'Ui_Start_Form'

...: 错误:'qt_metacall' is not a member of 'Ui_Start_Form'

解决方案:当多继承的时候,要将QObject放在前面,即将类的声明改为

class Start : public QObjectpublic QGraphicsItem

/********************************************************************/

【错误2】

error:   argument   of   type   `void   (CTest::)(int) '   does   not   match   `void   (*)(int) ' 
代码如下: 

void   CTest::handle_signal(int   s)   
{   
printf( "ctrl+c\n "); 
exit(1); 
} 

void   CTest::initsignal() 
{ 
signal(SIGINT,   handle_signal); 
} 

void   CTest::start() 
{ 
initsignal(); 
                  init(); 
} 

但是把代码改成handle_signal移出类CTest就可以通过,并且运行正常,这是为什么呢,不移出类的话,我试过很多改动都不行,请高手指点一下,谢谢.

原因:因为signal的处理函数只能有一个,否则的话就不知道到底要调用哪个函数了。 

类的成员函数与类的个数相关,比如:定义 
CTest   a,b,就会有2个void   CTest::handle_signal(int   s)。 

你编程序时希望类a调用a的handle_signal,类b调用b的handle_signal,但系统没这么聪明。 

说复杂点,其实以上的说法不完全正确,具体实现时,a和b的handle_signal地址是相同的,但隐藏了一个This的指针,使用single时,造成参数不统一。 
static函数仅有一份,也不包含隐藏的This的指针参数。 

总而言之,single对应的必须是普通函数或static的类成员函数。 

解决Qt单元测试自定义类型报错的问题 QTest::addColumn >("idxinfolist");   QTest::addColumn("datatype");   QTest::addColumn("dataname"); 编译报错如下: /opt/linux_virtual/qt/qt-4.8.6/pc/include/QtCore/qmetatype.h:169: error: 'qt_metatype_id' 阅读详情

相关推荐

Qt GUI开发入门:从环境搭建到界面设计实战指南

GUI(图形用户界面)开发是软件工程中的重要领域,它通过可视化组件实现用户与程序的交互。其核心原理在于事件驱动模型,即用户操作触发事件,程序通过事件处理机制响应。这一技术价值在于极大提升了软件易用性和用户体验,广泛应用于桌面应用、嵌入式系统、工业控制等场景。在众多GUI框架中,Qt以其跨平台特性和强大的信号与槽机制脱颖而出,成为C++开发者的首选。本文聚焦Qt框架,详细解析其核心机制——信号与槽,并通过构建计算器界面等实战案例,系统介绍环境搭建、控件使用、布局管理及样式美化等关键技能,帮助开发者快速掌握这一

weixin_30667649的博客 401

QT中添加Q_OBJECT出现的问题

Multiple Inheritance Requires QObject to Be First(多重继承QObject一定要放在前面) 我在用class My_Node : public QGraphicsItem,public QObject来生成自己的类时,想使用信号和槽机制,但这是dys_node.h中没有Q_OBJECT,不能使用信号槽。我将Q_OBJECT加上之后,出现几个不知道是什么的错误。然后我将工程目录下的Makefile删除,然后重新编译、链接文件,刚才的错误消失了,但出现如下三个错

Turn X7 2353

Qt跨平台开发指南:从C++ GUI框架到全平台应用解决方案

跨平台应用开发是软件开发中的核心需求,旨在实现一套代码在多个操作系统上运行,从而降低开发与维护成本。其技术原理通常涉及抽象层封装和统一API设计,将不同平台的底层差异进行屏蔽。在众多技术方案中,C++因其高性能和丰富的生态,常被用于开发对性能有苛刻要求的桌面、嵌入式及工业软件。Qt框架正是这一领域的杰出代表,它通过独特的元对象系统和信号槽机制,为C++注入了动态能力,并提供了从传统命令式的Qt Widgets到现代声明式的Qt Quick/QML两种编程范式。这使得开发者既能利用C++的极致性能处理核心业务

weixin_34241036的博客 359

重写QGraphicsEllipseItem,报错error C2039: “staticMetaObject“: 不是 “QGraphicsEllipseItem“ 的成员

如图新建一个继承 QGraphicsEllipseItem 类报错 moc_myEllipseItem.cpp(67,56): error C2039: "staticMetaObject": 不是 "QGraphicsEllipseItem" 的成员moc_myEllipseItem.cpp(86,34): error C2039: "qt_metacast": 不是 "QGraphicsEllipseItem" 的成员moc_myEllipseItem.cpp(91,33): error C2039

qq_42043599的博客 881

error: C2039: “staticMetaObject”: 不是“QGraphicsItem”的成员

当使用Qt的图形视图框架时,自定义图形类时,一般这样写 class myItem:public QGraphicsItem { public: myItem(); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QRectF boundingRect() const; }; 然而有些时候,我们需要使用信号与槽,就需要增加 Q_OBJECT,这时,就会报错 error: C2039:

weixin_44103773的博客 1455

Qt构建套件:MinGW与MSVC的深度解析与实战选型指南

本文深度解析Qt开发中MinGW与MSVC两大构建套件的核心差异与实战选型。通过对比编译器原理、工具链构成、性能调试及第三方库兼容性,为不同场景(如纯Qt GUI应用、需深度集成Windows特性的项目、库开发)提供明确的选型指南,帮助开发者根据项目需求做出高效决策,规避常见陷阱。

pea55的博客 657

QT5.9.0环境下睿尔曼机械臂C++ API开发实战:从环境配置到MoveJ运动控制

本文详细介绍了在QT5.9.0环境下,利用C++ API对睿尔曼机械臂进行二次开发的完整实战流程。内容涵盖从Windows/Linux双平台的环境配置、SDK集成、项目架构设计,到核心MoveJ运动控制功能的实现,并深入探讨了错误处理与性能优化等高级话题,旨在帮助开发者快速构建稳定、跨平台的机械臂控制应用。

i1j2k的博客 169

Qt框架更新解析:从模块依赖到打包部署的C++跨平台开发实战

C++跨平台应用开发框架是现代软件开发中的重要工具,它通过提供统一的API抽象层,实现了“一次编写,到处编译”的核心价值。这类框架通常包含GUI组件、网络通信、数据序列化等模块,其技术价值在于显著提升开发效率,降低多平台适配成本,广泛应用于桌面软件、嵌入式系统、工业控制等领域。在众多解决方案中,Qt以其成熟的元对象系统和信号槽机制脱颖而出。近期Qt官方更新针对开发者长期关注的模块依赖管理和应用部署等痛点进行了优化,例如对xlsx模块安装流程的简化和MSVC编译链配置的改进,使得开发体验更加流畅。这些更新直接

weixin_34067102的博客 296

C++与Python实现Modbus TCP客户端:Qt框架下的性能与效率抉择

在工业自动化与数据采集领域,Modbus TCP协议作为设备通讯的基石,广泛应用于PLC、传感器等工业设备的网络通信。其原理基于TCP/IP协议栈,将传统的串行Modbus协议报文封装为TCP数据包进行传输,实现了在以太网环境下的可靠数据交换。这项技术的核心价值在于解决了异构工业设备间的互联互通问题,为SCADA系统、上位机软件提供了标准化的数据访问接口。在实际工程实践中,开发者常面临技术栈选型的挑战:是选择C++结合libmodbus库追求极致的运行时性能与资源控制,还是采用Python配合pymodbu

weixin_33859231的博客 433

C++跨平台开发利器:Qt核心机制、实战与部署全解析

在C++桌面应用开发领域,跨平台与开发效率是开发者面临的核心挑战。传统的原生API开发方式往往导致代码难以移植和维护。Qt作为一个成熟的应用程序框架,通过其独特的信号与槽机制实现了对象间的松耦合通信,替代了传统的回调函数,极大地提升了代码的可维护性和模块化程度。其元对象系统(Meta-Object System)为这些高级特性提供了运行时支持。在工程实践层面,Qt提供了从核心功能到GUI、网络、数据库的完整模块化技术栈,支持一次编写、到处编译,显著提升了开发效率。对于需要构建现代、美观且需在Windows、

weixin_30691871的博客 439

Qt C++前后端数据交互架构:从信号槽到MVP模式实战

在桌面应用开发中,前后端数据交互是核心架构问题。Qt框架通过信号槽机制提供了线程安全的通信基础,其本质是一种观察者模式的实现,支持同步和异步调用。这种机制的技术价值在于解耦界面与业务逻辑,提升代码可维护性和可测试性。在工业控制、数据可视化等复杂交互场景中,结合Model-View-Presenter(MVP)分层架构,能够构建清晰的数据流。本文以数据监控面板为例,深入探讨如何通过信号槽连接类型选择、QMetaObject::invokeMethod等技巧,实现高效的前后端通信,解决界面卡死、跨线程崩溃等常见

agcozdwdfvds08078的博客 375

QT与Golang技术栈深度对比:从桌面开发到云原生的职业选择与实战解析

在软件开发领域,技术栈的选择直接影响开发效率和职业发展路径。桌面应用开发曾长期依赖C++与跨平台框架,其核心在于处理图形界面、本地资源管理与多线程协作。随着云计算与微服务架构的兴起,后端开发更注重高并发、低延迟与可扩展性,催生了新的编程范式。Golang凭借其简洁语法、原生并发支持(goroutine与channel)和高效的垃圾回收机制,成为构建云原生服务的首选。相比之下,传统桌面框架如QT虽在嵌入式与工业控制领域仍有应用,但其生态相对封闭,技能迁移性较弱。本文聚焦于部署依赖管理、内存对象树等具体挑战,并

weixin_34242819的博客 405

Granite-4.0-H-350m在Qt开发中的应用:跨平台UI设计

本文介绍了如何在星图GPU平台上自动化部署【ollama】granite-4.0-h-350m镜像,赋能Qt跨平台UI开发。该轻量级AI模型可快速解析.ui文件、生成PyQt/Qt C++代码,并智能提供多平台样式适配方案,显著提升界面原型开发与跨系统调试效率。

weixin_34945060的博客 165

【技术选型指南】Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt与Tauri:从场景到决策的深度剖析

本文深度剖析了Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt与Tauri等跨平台框架的技术选型策略。从性能需求、团队技术栈、部署目标等核心考量因素出发,结合实战案例,为开发者提供从场景到决策的完整指南,帮助选择最适合的跨平台开发方案。

weixin_29001423的博客 252

嵌入式GUI框架选型指南:LVGL、Qt、TouchGFX等6大方案深度对比

图形用户界面(GUI)是嵌入式设备与用户交互的核心,其选型直接影响开发效率和产品体验。GUI框架通过封装底层绘图、事件处理和控件逻辑,为开发者提供高效构建界面的工具。在资源受限的嵌入式环境中,选择合适的框架尤为关键,它需在性能、内存占用和开发便利性间取得平衡。从智能家居控制面板到工业HMI,嵌入式GUI广泛应用于消费电子、物联网和工业控制领域。本文聚焦LVGL、Qt for MCU、TouchGFX等主流框架,结合**硬件加速**和**资源消耗**等核心考量,提供从芯片资源评估到生态工具链的选型决策树,帮助

weixin_30797199的博客 401

一个新手程序员的项目经验

刚开始进入公司是在3月份,做的一份工作是DirectFB的移植,前后花了一个月的时间。就是做这个项目的时候我知道了在学校和社会的不同了,很简单的一个例子。移植成功后,在跑测试用例的时候发现有几个测试用例运行不成功。这要是在学校谁还会管他呢,但是在公司的做法是去看代码找出为什么会出现这个错误。 DirectFB移植完成以后,导师突然说是他邮件给看错了,所以之前移植的DirectFB并不能派...

mmdev 1248

嵌入式开发实战指南:从MCU到AIoT的技术栈解析与调试技巧

嵌入式系统开发是连接硬件与软件的核心技术领域,其核心在于实现对特定设备的专用计算与控制。其工作原理涉及从底层硬件寄存器操作到上层应用逻辑的完整技术栈,通过交叉编译、实时操作系统(RTOS)及设备树等机制,确保软件在资源受限的环境下高效、可靠运行。这项技术的价值在于为智能设备赋予“大脑”,是实现万物互联和智能化的基石,广泛应用于消费电子、工业控制、汽车电子及AIoT边缘计算等场景。本文聚焦嵌入式开发中的高频实战需求,例如针对设备树(Device Tree)的串口调试配置、利用VS Code与CMake搭建高效

weixin_33704591的博客 362

28岁转行嵌入式开发:实战路线、Rust机遇与求职突围指南

嵌入式开发是融合硬件、底层软件与操作系统的综合技术领域,其核心在于通过编程实现对物理设备的精准控制。从单片机到实时操作系统(RTOS),再到嵌入式Linux,技术栈的演进体现了系统复杂性与开发需求的提升。掌握C语言、理解硬件原理与通信协议是构建稳定可靠嵌入式系统的基石,而FreeRTOS等操作系统则解决了多任务调度与资源管理的工程难题。随着物联网(IoT)和汽车电子的发展,嵌入式技术的价值日益凸显,尤其在要求高可靠性、实时性的场景中不可或缺。对于寻求职业转型的开发者,嵌入式领域不仅提供了软硬结合的独特成就感

weixin_33991418的博客 467
上一篇: C++对象模型[下]
下一篇: QT示例代码【积累】
_小青年儿_
博客等级 码龄16年 155粉丝 283原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值