C++ 实现QT信号槽

https://github.com/libsigcplusplus/libsigcplusplus

cpp 复制代码
#include <iostream>

/*
在sigslot.h的420,将:
//typedef sender_set::const_iterator const_iterator;
改为:
//typedef typename sender_set::const_iterator const_iterator;

#include <sigslot.h>
using namespace sigslot; //必须加上sigslot的命名空间
//在用vs调试时还需要将sigslot.h中很多的自定义模板结构类型前加typename
const int TTRUE = 1;
const int TFALSE = 0;
class Switch
{
public:
	signal0<> Clicked;
	//这里的信号是不带参数的,signaln表示带几个参数
};
class Light : public has_slots<>
{
public:
	Light(bool state) { b_state = state; Displaystate(); }
	void ToggleState() { b_state = !b_state; Displaystate(); } //作为消息的响应
	void TurnOn() { b_state = TTRUE; Displaystate(); }
	void TurnOff() { b_state = TFALSE; Displaystate(); }
	void Displaystate() { std::cout << "The state is " << b_state << std::endl; }
private:
	bool b_state;
};
void main()
{
	Switch sw1, sw2, all_on, all_off;
	Light lp1(TTRUE), lp2(TFALSE);
	sw1.Clicked.connect(&lp1, &Light::ToggleState); //绑定
	sw2.Clicked.connect(&lp2, &Light::ToggleState);
	all_on.Clicked.connect(&lp1, &Light::TurnOn);
	all_on.Clicked.connect(&lp2, &Light::TurnOn);
	all_off.Clicked.connect(&lp1, &Light::TurnOff);
	all_off.Clicked.connect(&lp2, &Light::TurnOff);

	sw1.Clicked();
	sw2.Clicked();
	all_on.Clicked();
	all_off.Clicked();

	sw1.Clicked.disconnect(&lp1);
	sw2.Clicked.disconnect(&lp2);
	all_on.Clicked.disconnect(&lp1);
	all_on.Clicked.disconnect(&lp2);
	all_off.Clicked.disconnect(&lp1);
	all_off.Clicked.disconnect(&lp2);
}
*/

#include <sigc++/sigc++.h>
class AlienDetector
{
public:

	void run() { signal_detected.emit("test"); }

	sigc::signal<void(std::string)> signal_detected;	// changed
};

void warn_people(std::string where)
{
	std::cout << "There are aliens in " << where << "!" << std::endl;
}

int main_callback()
{
	AlienDetector mydetector;
	auto target = mydetector.signal_detected.connect(sigc::ptr_fun(warn_people));  // return sigc::connection


	mydetector.run();

	target.disconnect();
	return 0;
}

创作不易,小小的支持一下吧!

相关推荐
future141212 分钟前
C#学习日记
开发语言·学习·c#
码农编程录18 分钟前
【c/c++3】类和对象,vector容器,类继承和多态,systemd,std&boost
c++
king_harry28 分钟前
Java程序-OceanBase Connector/J 示例
开发语言
傻啦嘿哟1 小时前
Python 办公实战:用 python-docx 自动生成 Word 文档
开发语言·c#
翻滚吧键盘1 小时前
js代码09
开发语言·javascript·ecmascript
q567315231 小时前
R语言初学者爬虫简单模板
开发语言·爬虫·r语言·iphone
??tobenewyorker2 小时前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
rzl022 小时前
java web5(黑马)
java·开发语言·前端
时序数据说2 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
jingling5552 小时前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架