Qt多重继承时的信号与槽
最近在公司项目中开发串口,因为历史原因串口要包装一下,且包装类需要继承自一个纯C++类。
QSerialPort可以使用slot function来获取从串口读到的数据,以及写入串口的bytes个数。因此就给自己的类加了对应的槽函数。代码示例如下:
#include <QObject>
class CBase
{
public:
CBase();
~CBase();
};
class CDerive:public CBase,public QObject
{
Q_OBJECT
public:
CDerive();
~CDerive();
public slots:
void slot1();
signals:
};
当然了,这段代码压根不能编译,错误如下:
debug/moc_CObejctTest.cpp:77:8: error: 'staticMetaObject' is not a member of 'CBase'
{ &CBase::staticMetaObject, qt_meta_stringdata_CDerive.data,
^
debug/moc_CObejctTest.cpp: In member function 'virtual void* CDerive::qt_metacast(const char)':
debug/moc_CObejctTest.cpp:94:12: error: 'qt_metacast' is not a member of 'CBase'
return CBase::qt_metacast(_clname);
^
debug/moc_CObejctTest.cpp: In member function 'virtual int CDerive::qt_metacall(QMetaObject::Call, int, void**)':
debug/moc_CObejctTest.cpp:99:11: error: 'qt_metacall' is not a member of 'CBase'
_id = CBase::qt_metacall(_c, _id, _a);
^
debug/moc_CObejctTest.cpp: In member function 'virtual void CDerive::qt_metacast(const char*)':
debug/moc_CObejctTest.cpp:95:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
Makefile.Debug:316: recipe for target 'debug/moc_CObejctTest.o' failed
mingw32-make[1]: *** [debug/moc_CObejctTest.o] Error 1
去查看Qt生成的moc文件:
const QMetaObject CDerive::staticMetaObject =
{
{
&CBase::staticMetaObject, //-----------------
qt_meta_stringdata_CDerive.data,
qt_meta_data_CDerive,
qt_static_metacall,
Q_NULLPTR,
Q_NULLPTR
}
};
注意其中有注释的一行,CBase并不是继承自QObject,所以也就不存在staticMetaObject类。 可是CDerive明明也有继承自QObject类,为啥生成的moc认到了CBase了呢
然后想到把QObject放到第一个父类的位置。如下:
class CDerive:public QObject,public CBase
这样就可以编译通过了。生成的moc如下:
const QMetaObject CDerive::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_CDerive.data,
qt_meta_data_CDerive, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
这就尴尬了。 难道moc只认继承列表中第一个位置的?
这个问题有空要查一下。。。。O(∩_∩)O哈哈哈~
Qt多重继承时的信号与槽的更多相关文章
- 第七章 探秘Qt的核心机制-信号与槽
第七章 探秘Qt的核心机制-信号与槽 注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用 ...
- Qt Quick 事件处理之信号与槽
前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本的语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经能够完毕 ...
- 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)
本章主要内容如下: 1) 窗口组件(QWidget) 2) QT坐标系统 3) 消息处理(信号与槽) 窗口组件(QWidget) 介绍 Qt以组件对象的方式构建图形用户界面 Qt中没有父组件的顶级组件 ...
- Qt对象模型之一:信号和槽
一.信号和槽机制概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal).这种发出是没有目 ...
- Qt Quick 事件处理之信号与槽(foruok的博客)
前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经可以完成简 ...
- Qt 编程指南 3 信号和槽沟通
https://qtguide.ustclug.org/ 1 信号和槽 所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座.怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键, ...
- Qt Quick中的信号与槽
在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容. 1. 链接QML类型的已知信号 QML中已有类型定义的信号分为两类:一类 ...
- Qt 和 Boost关于信号和槽的对比说明
对比 无论是 Qt 的实现方式还是 Boost 的实现方式,除了必须的定义信号和槽的类之外,都不需要额外的类. 两种实现都解决了类爆炸的问题.下面让我们对照着来看一下我们前面的分析. 两个不同的术语以 ...
- Qt带参数的信号和槽
在Qt的开发过程中,信号带参数是很常见的,在使用带参数的信号槽时,有以下几点需要注意. 当信号和槽函数的参数数量相同时,它们的参数类型要完全一致. 信号和槽函数的声明: signals: void i ...
随机推荐
- SQL查询语句执行速度快,存储过程执行慢
今天一个生成10w条数据的存储过程执行了95s,但是单独执行SQL语句只需要28s,查资料后发现原来这是存储过程的机制导致的,也就是传说中的参数嗅探 网上的一段话: (1)可能是发生了参数嗅探,第一次 ...
- 操作系统和程序设计语言的API使用的字符编码分析
1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...
- Android Studio 常用快捷键
继承Eclipse的快捷键 : File->Settings->Keymap->有一个Keymaps 下拉菜单,选择Eclipse. 这里讲主要常用的快捷键 : Ctrl ...
- 静态方法中的this
1using System; 2using System.Web.Script.Serialization; 3 4namespace Demo 5{ 6 /**//// <summary ...
- pointer to function
指针.函数.数字.结构体.指针函数.函数指针 初学不好区分,做点儿实验来有效区分一下,以下代码采用dev-C++平台测试 //pointer to fucntion 函数功能是 基地址加偏移量得到偏移 ...
- 【转】Duff's Device
在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). ...
- Html概要及示例(一)
Html 简介 Html 是一种超文本标记语言,标记往往成对出现,例如 段落标记<p> 层标记 <div> 以及 <marqueen>等等,标记繁多 但未必就要全 ...
- 课前HTML基础
一..站点的建立 作用:用来归纳一个网站上所有的网页,素材以及他们之间的联系. 站点根文件夹的命名规则:必须是以英文或者下划线开头,后面可接数字和下划线,不可以使用中文和特殊字符. 二:创建HTML页 ...
- CSS教程:div垂直居中的N种方法[转]
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- jquery.easyui代码详解,和遇到的问题,提供大家在使用的时候少走弯路(一)
初次使用jquery.easyui这个东东,虽然简单,但还是很费力的去研究了一下使用,在使用过程中遇到的问题,下面代码会详细的注释到 引用的文件jquery.min.js j ...