信号槽连接失败原因分析

news/2025/3/31 10:29:29/

信号槽介绍

信号槽是Qt重要的一种机制, 这使得对象之间的通信非常方便。但是使用过程中会遇到连接失败的情况,下面就说一下信号槽的连接:
信号槽连接的前提条件:
1.信号有声明定义,Q_SIGNALS 有该关键字。
2.槽函数有声明定义以及实现, 有Q_SLOTS关键字, (QT5之后的版本普通函数也可以做槽函数)。
3.槽函数和信号声明的变量和类型一致。
4.自定义类要有Q_OBJECT关键字声明
这四个条件缺一不可。如果不满足,信号槽肯定会连接失败

示例代码

test.h

#inlcude <QDialog>
#include <QPushButton>
class test :public QDialog
{
public:explicit  test(QDialog* parent= nullptr);
public Q_SLOTS:void btn_slot();
private:QPushButton* m_btn;
}

test.cpp

#include "test.h"
#include <QDebug>
test::test(QWidget* parent):
QDialog(parent),
m_btn(new QPushButton(this)){if(!connect(m_btn, SIGNAL(clicked()), this,SLOT(btn_slot()))){Q_ASSERT(false);}
}
void test::btn_slot()
{qDebug()<<"btn is clicked";
}

这个例子中信号和槽连接是失败的。你会发现, 信号,槽都有, 信号和槽参数也都一致,怎么就连接失败了,编译也没有报错.
仔细看会发现这是一个自定义的类,由于类中没有声明Q_OBJECT该关键字, 该文件就不会生成对应的moc文件, 也就无法建立QObject中的信号槽机制。
修改点:
将test.h文件个改成下面即可

#inlcude <QDialog>
#include <QPushButton>
class test :public QDialog
{
Q_OBJECT
public:explicit  test(QDialog* parent= nullptr);
public Q_SLOTS:void btn_slot();
private:QPushButton* m_btn;
}

新建文件很容易忘记添加Q_OBJECT该关键字。导致信号槽连接失败。由于又没有明显的编译提示,不仔细看的话容易忽略这个点。


http://www.ppmy.cn/news/235472.html

相关文章

ajax发送失败 网络异常,如何检测网络断开导致的Ajax呼叫失败

我使用jquery ajax方法向web服务器发送大量数据,客户端只在收到服务器的确认后才响应,现在假设网络连接在ajax调用的MIDDLE中丢失,那么如何检测这种情况. $.ajax({ url:server.php, data:lots of data from 200KB to 5MB, type:post, success: function(data) { alert(Success)…

操作成功失败html,固话呼叫转移设置不成功怎么办?

怎么把固定电话设定呼叫转移到手机上呢&#xff1f; 我想把固定电话设置呼叫转移到自己的手机号码上&#xff0c;我老是外出。 怎样设置固定电话的呼叫转移&#xff1f; 您好&#xff0c;固话呼叫转移功能是免费的&#xff0c;但是呼转后按通讯费收取&#xff0c;一般是0.15/0.…

数字化转型失败,有哪些原因?

Flexera最近对 CIO 和其他高层 IT 领导者进行的一项调查显示&#xff0c;超过一半的受访者将数字化转型列为他们最关注的一点&#xff0c;紧随其后的是网络安全、云优先/云迁移和改善客户体验&#xff0c;这些都紧紧依赖于数字化转型。 数字化转型不再仅仅是流行词&#xff1b…

连接服务器失败是什么原因

连接服务器失败的原因有&#xff1a;1、网络出现故障&#xff0c;可以使用断网急救箱检测&#xff0c;进行修复&#xff1b;2、电脑设置了连接限制&#xff0c;可以手动设置DNS&#xff0c;进行修复。 本教程操作环境&#xff1a;windows7系统 原因 1、网络出现故障&#xff…

FS 查找呼叫失败的原因

执行这个命令 查询 10月7号这天的错误日记 grep -r "Originate Failed" /usr/local/freeswitch/log/freeswitch.log.2015-10-07* >> sip_error.txt 查询错误信息数量 wc -l sip_error.txt 删除包括 指定字符的 错误记录 INVALID_NUMBER_FORMAT SUBSCRIBER…

呼叫失败原因码SIP代码

1 概述 本文档描述发起呼叫失败时增加原因码&#xff1a;SIP响应描述或Freeswitch内部的错误描述。 2 返回错误码描述 2.1 SIP响应消息 SIP响应消息 错误码描述 说明 400 Bad Request 错误请求 401 Unauthorized 无权 402 Payment Required 要求付款 403 Forbi…

VONR语音呼叫失败原因分析案例

现象概述 SA站点开通后&#xff0c;配合核心网进行VoNR业务调试&#xff0c;现场测试发现手机正常显示5G HD&#xff0c;但是发起语音电话会回落4G网络&#xff0c;无法在5G网络上进行语音业务。 流程图 原因分析 后台核查5G站点VONR功能参数配置&#xff0c;VONR开关均已打开…

基于vb+access的小区物业管理系统的设计与实现

本文通过用VB 6.0编写小区物业管理系统,利用软件工程原理,采用生命周期方法学,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,实现了小区信息数据库的创建及各种费用的收取、统计、汇总。 本文还简单介绍了vB6.0软件的界面及操作方法。简要介绍了窗…