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 ......的更多相关文章

  1. 6.QT信号和槽

     新建项目SignalAndSlot项目 编写代码如下: mysignal.h #ifndef MYSIGNAL_H #define MYSIGNAL_H   #include <QObje ...

  2. QT 信号与槽connect

    QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...

  3. Qt 信号与槽

    Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...

  4. QT信号和槽

    QT信号和槽 ============ 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler) ...

  5. QT运行出错:QObject::connect: Parentheses expected以及QObject::connect: No such slot ***

    我在QGraphicsScene子类中添加了item的弹出菜单,并连接Action到槽函数,结果槽函数不起作用,输出:QObject::connect: No such slot ***  C++ C ...

  6. Qt信号与槽机制

    一.信号和槽机制 信号和槽用于两个对象之间的通信,信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出的特征.在GUI编程中,当改变了一个部件时,总希望其他部件也能了解到该变化.更一般来说 ...

  7. Qt信号与槽使用方法最完整总结

    在图形界面编程中(参考<C++最好的图形库是什么?>),组件之间如何实现通信是核心的技术内容.Qt 使用了信号与槽的机制,非常的高效.简单.易学,方便开发者的使用.本文详细的介绍了Qt 当 ...

  8. Qt 信号与槽的自动关联机制

    前言 对于一些简单的事件判别,如点击按钮.无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btns ...

  9. Qt 信号和槽函数

    信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...

随机推荐

  1. Oracle - 通过dg,完成单实例到rac的迁移

    一.概述 本文将介绍如何给单实例搭建一个rac dg,以及如何对其进行角色转换,完成从单实例到rac的迁移.预先具备的知识(rac搭建,单实例-单实例dg搭建) 二.实验环境介绍 主库(已有数据库实例 ...

  2. 【Maven】使用学习

    Maven使用 Maven Jar 搜索:https://mvnrepository.com/ Maven 国内镜像库 <mirror> <id>nexus-aliyun< ...

  3. GHOST CMS - Package.json

    Package.json The package.json file is a set of meta data about a theme. package.json 文件是一组关于主题的元数据. ...

  4. d3.js 共享交换平台demo

    今天在群里遇到一张图  遂来玩一玩,先来上图!! 点击相应按钮,开关线路,此项目的重点是计算相应图形的位置,由于是个性化项目就没有封装布局.好了直接上代码. <!DOCTYPE html> ...

  5. vue-practice

    vue-完整代码 这是一个完整的vue案例,但是接口似乎都失效了,单是代码本身还是很有参考价值的呦!~ 里面包含了:vue,vue-router,....,还是直接看json文件吧 { "n ...

  6. iOS----------证书的制作

    https://developer.umeng.com/docs/66632/detail/66748#createappid Certificates-> 卫生许可证 identifiers ...

  7. MySQL Event历史记录

    需求 SQL Server的作业历史(Job)记录是保存在msdb库中的,很方便就查询相关的Job定义,计划和历史记录,而MySQL的event却没有历史记录.为方便查看event是否正常执行以及执行 ...

  8. 本地的个人web网站上线的全过程,供大家参考(PHP,简易的LAMP环境搭建)

    一 : 你需要准备的东西 1.本地能访问的网站,最好是改过host文件和apache的httpd-vhosts.conf,配置过本地域名的那种(减少传到线上出现的问题,文件路径不对呀啥的) 2.一个云 ...

  9. Elasticsearch系列---初识Elasticsearch

    Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源.分布式.Restful接口的全文搜索引擎,还是一个分布式文档数据库.天生就是分布式.高可用.可 ...

  10. 【CF528D】Fuzzy Search

    Problem Description 你有一个长度为 \(n\) 的串 \(S\),以及长度为 \(m\) 的串 \(T\). 现给定一个数 \(k\) ,我们说 \(T\) 在 \(S\) 的位置 ...