Qt信号与槽

信号与槽

  • GUI用户界面中,当用户操作一个窗口部件时,需要其他窗口部件响应,传统方式经常使用callback(回调机制)来实现。所谓回调即事先将函数指针作为参数传递另一个函数,然后在函数处理过程中适当地方调用回调函数回调机制有两个缺陷:类型不安全,不能保证调用函数过程中使用正确的参数;强耦合,处理函数必须知道调用哪个回调函数。Qt的信号与槽机制是类型安全的,松耦合,更灵活,更方便。
  • 信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
  • 信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。发射信号使用Qt的emit关键字。QT 的 signals 关键字指出进入了信号声明区,随后即可声明自己的信号。

 
定义信号,如:

signals: 
	void launch(QString &str);	//声明一个信号, 信号不能具体实现

 
发射信号,如:

private slots: 
	void reception() {
   	//响应信号的槽函数
		QString str = "响应了 launch() 信号!";
		emit launch(str);	//发射信号
	}

 
槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以声明在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
 
声明三个槽方法,如:

private slots: 
	void reception();	//响应信号的槽函数
	void reception2();
	void accept(QString &str);

 
槽方法中处理需要处理的工作,如:

void MainWindow::accept(QString &str){
   	//MainWindow.cpp中实现槽方法
   	qDebug() << str;	//调试输出	添加头文件 #include <QDebug>
}

 
GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
 
信号与槽关联是用 QObject::connect() 函数实现:

QMetaObject::Connection QObject::connect(
	const QObject *sender, 			//信号发送者
	const char *signal, 			//发送的信号
	const QObject *receiver, 		//信号接收者
	const char *method, 			//表示与信号连接的方式的字符串,可以是槽或信号
	Qt::ConnectionType type =</
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值