Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......
2019-08-14起笔
小熊的情况描述:
父类A继承自QWidget,所以父类A自动添加了Q_OBJECT。 子类B继承自父类A,子类B没有添加Q_OBJECT。在子类B中给动态创建的控件添加事件和槽。编译通过,无警告,无错误。运行时,应用程序输出栏显示:QObject::connect: No Such slot ......
网上扒拉扒拉很多网友给的方案是这样的:
以后要是碰到no such slot的问题
、添加头文件#include<QCoreApplication>
、看类声明中有没有Q_OBJECT
、看slot函数有没有声明 private slots:
void xxxx(); 、查看slot有没有出现拼写错误~~~
然而,小熊并没有从方案一受益,于是接着发现了下面这样一个方案:
在xxx.pro文件中添加 OBJECTS_DIR = tmp
MOC_DIR = tmp
哈哈~百试不爽。 非常OK。
但是,问题接踵而至,再添加子类,子类C继承父类A,同样的场景,同样的处理方法,不见效了....what???请教网友了。
2019-08-16续写
基类B和基类C的信号和槽的关联方式为:
connect(m_lineEditL, SIGNAL(editingFinished()), this, SLOT(slotsLineEditContentVerify()));
今天在小熊在尝试两种方式使用线程的时候,我发现用另一个版本的connect比上面使用SIGNAL/SLOTS宏的版本好用,因此尝试做如下修改:
QObject::connect(m_lineEditL, &QLineEdit::editingFinished, this, &ZLayout::slotsLineEditContentVerify);
问题搞定,perfect。
回过头来思考, 编译错误提示是没有 基类::slotsFunctiong, 而this执行对象,是从基类继承而来的,我们又知道带宏定义SIGNAL/SLOTS版本的connect仅仅是做函数名的字符串替换,并不会像上面第二个版本一样进行类型检查,所以导致了异常现象的出现。
然后把修改工程文件的事情删掉,并不影响什么,说明不需要更改工程文件。 另外,每一个基类都应当采用第二种版本的connect。
小熊分析的真棒!!!
网友的力量真强大!!!
2019年08月18日续写
重读16日续写的内容,冥冥之中感觉到自己的解释不能够清晰的说服自己。 同时,无敌小熊猜疑到另一个点,是否是在父类A中声明一个跟基类B和基类C用到的槽函数一样的虚槽函数,问题一样可以解决呢,于是动手尝试了一下,在父类A中做如下补充:
parentCalss.h public slots:
virtual void slotsLineEditContentVerify(); ...
parentClass.cpp
void slotsLineEditContentVerify()
{
}
这种方案下,两种connect版本都可以达到想要的效果。
通过对比,小熊再次认定第二种版本的connect好用,为啥呢,可以少做不必要的事情而达到相同的目的。至于8月18号解释的原因小熊日后再做校准。
Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......的更多相关文章
- 6.QT信号和槽
新建项目SignalAndSlot项目 编写代码如下: mysignal.h #ifndef MYSIGNAL_H #define MYSIGNAL_H #include <QObje ...
- QT 信号与槽connect
QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...
- Qt 信号与槽
Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...
- QT信号和槽
QT信号和槽 ============ 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler) ...
- QT运行出错:QObject::connect: Parentheses expected以及QObject::connect: No such slot ***
我在QGraphicsScene子类中添加了item的弹出菜单,并连接Action到槽函数,结果槽函数不起作用,输出:QObject::connect: No such slot *** C++ C ...
- Qt信号与槽机制
一.信号和槽机制 信号和槽用于两个对象之间的通信,信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出的特征.在GUI编程中,当改变了一个部件时,总希望其他部件也能了解到该变化.更一般来说 ...
- Qt信号与槽使用方法最完整总结
在图形界面编程中(参考<C++最好的图形库是什么?>),组件之间如何实现通信是核心的技术内容.Qt 使用了信号与槽的机制,非常的高效.简单.易学,方便开发者的使用.本文详细的介绍了Qt 当 ...
- Qt 信号与槽的自动关联机制
前言 对于一些简单的事件判别,如点击按钮.无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btns ...
- Qt 信号和槽函数
信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...
随机推荐
- 【H5】316- 移动端H5跳坑指南
最近在一个移动端的 Web 项目中踩了很多的坑,感觉有必要把它们记录下来,分享给即将踏入移动端 Web 开发大门的朋友们,更好的解决ios和android兼容. 1.input获取焦点时,页面被放大 ...
- 002_Java语言基础
------------恢复内容开始------------ 存储的基本单元:byte: 1 byte = 8 bit(位) 1 KB = 1024 byte 1 MB = 1024 KB 1 GB ...
- 【Java Web开发学习】Spring消息-ActiveMQ发送消息
ActiveMQ发送消息 转载:http://www.cnblogs.com/yangchongxing/p/9042401.html Java消息服务(Java Message Service, J ...
- java面试题干货1-50
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...
- android studio 代码问题总结
1,android studio隐藏title时,用eclipse里面的方法不行,所以用下面的代码解决,此代码需要写在 加载xml文件之后 getSupportActionBar().hide(); ...
- 网络配置工具iproute2和net-tools的基本原理和基本使用方法
这是网络程序设计课程的第一次作业的博客,由于还是小白,分享的内容都是比较基础的东西,希望看到的各位同学可以提出指导意见,必将虚心听取. 这次分享的内容是网络配置工具iproute2和net-tools ...
- quick start guide for XMEGA ADC
This is the quick start guide for the Analog to Digital Converter (ADC), with step-by-step instructi ...
- WinForm GroupBox控件重绘外观
private void groupBoxFun_Paint(PaintEventArgs e, GroupBox groupBox){ e.Graphics.Clear(groupBox.BackC ...
- java8-StreamAPI之collection归约操作
一说明 经过前一篇的StreamAPI学习,基本的流操作我相信大家都熟练于心了,那么今天是要详细解析一下收集器(collect)这么API 前提要区分,collect(StreamAPI)与coll ...
- 调用高德API,通过输入的地址,如省份、市、区获取经纬度 ,通过输入的经纬度,获取区域详情
一.pom <?xml version="1.0" encoding="UTF-8"?><projectxmlns="http:// ...