大佬教程收集整理的这篇文章主要介绍了Qt信号槽源码剖析(一),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
大家好,我是IT文艺男,来自一线大厂的一线程序员
大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道;也就是说大家只知道怎么使用,却不知道基于什么原理,显然这是不符合深层次发展的;那么今天我就给大家基于Qt源码以及示例代码深度剖析Qt的信号槽机制,一定会对大家有帮助。
当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。
用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal,
const QObject *receiver, const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
通过QObject::connect静态函数建立连接;其中sender与receiver是指向对象的指针,signal与method分别通过SIGNAL()与SLOT()宏来进行转换。
#pragma once
#include <QtCore/QObject>
class Counter : public QObject
{
Q_OBjeCT
public:
Counter();
public:
int value() const;
public slots:
void @R_673_6938@ue(int value);
signals:
void valueChanged(int newvalue);
private:
int m_value;
};
#include "Counter.h"
Counter::Counter():m_value(0)
{
}
int counter::value() const
{
return m_value;
}
void Counter::@R_673_6938@ue(int value)
{
if (value != m_value)
{
m_value = value;
emit valueChanged(value);
}
}
@H_139_41@main.cpp文件
#include <QtCore/QCoreApplication>
#include "Counter.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Counter counterA;
Counter counterB;
QObject::connect(&counterA, SIGNAL(valueChanged(int)),
&counterB, SLOT(@R_673_6938@ue(int)));
counterA.@R_673_6938@ue(10);//counterA.value()=10, counterB.value()=10
counterB.@R_673_6938@ue(20);//counterA.value()=10, counterB.value()=20
return a.exec();
}
宏定义在qobjectdefs.h文件中(位于QtCore目录)
Qt信号槽源码剖析系列会分拆为多个具体的细致讲解,后续我会一一分析并发布
今天就讲解到这里,更详细的原理分析与讲解,请关注微信公众号(itwenyinan),观看对应的的视频版讲解;谢谢
以上是大佬教程为你收集整理的Qt信号槽源码剖析(一)全部内容,希望文章能够帮你解决Qt信号槽源码剖析(一)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。