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;
}

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

相关推荐
派大星-?11 小时前
自动化测试五模块一框架(上)
开发语言·python·测试工具·单元测试·可用性测试
wangjialelele11 小时前
万字整理计算机网络知识点
linux·c语言·网络·c++·计算机网络·php
草莓熊Lotso11 小时前
Qt文件操作:QFile读写全解析
运维·开发语言·c++·人工智能·qt
S-码农11 小时前
Linux——互斥锁
linux·开发语言
Drifter_yh11 小时前
「JVM」 Java 类加载机制与双亲委派模型深度解析
java·开发语言·jvm
D_evil__11 小时前
【Effective Modern C++】第六章 lambda表达式:34. 考虑lambda而非bind
c++
xyq202411 小时前
《Ionic 卡片:设计理念与实战指南》
开发语言
wjs202411 小时前
《Chart.js 环形图》
开发语言
水木姚姚11 小时前
string类(C++)
开发语言·c++·windows·vscode·开发工具
方便面不加香菜11 小时前
C++ 类和对象(一)
开发语言·c++