槽和普通c++成员函数一样只可以为虚函数,也可以被重用,可以是公有的也可以是私有的,也可以被其它的c++函数调用;
参数也是任意的
唯一不同的是本槽和信号是可以连在一起的,和c#的事件差不多。相连后每当发射这个信号后就会自动调用这个槽
connection(sender,SIGNAL(signal),receiver,SLOT(slot));
sender就发送信号的Qobject指针
receiver是槽的Qobject指针
signal和slot是只有形参的函数名。SIGNAL和SLOT宏会把它们的参数转换为相应的字符串
1.一个信号可以连接多个槽
在发射信号的时候顺序不确定
.h
private slots: void Open1(); void Open2();
.app
myQt::myQt(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1())); QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open2())); } void myQt::Open1() { QMessageBox msg; msg.setText("Open1!"); msg.exec(); } void myQt::Open2() { QMessageBox msg; msg.setText("Open2!"); msg.exec(); }
2.多个信号可以连接同一个槽
QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1())); QObject::connect(ui.btn_ClickBool,SIGNAL(clicked()),this,SLOT(Open1()));
3.一个信号可以与另外一个信号相连
QObject::connect(ui.btn_Open,SIGNAL(clicked()),ui.btn_ClickBool,SLOT(click()));
4连接可以被删除
删除所有的连接
QObject::disconnect(ui.btn_Open,0,0,0); //或者 ui.btn_Open->disconnect();
删除指定的连接
QObject::disconnect(ui.btn_Open,SIGNAL(clicked()),0,0); //或者 ui.btn_Open->disconnect(SIGNAL(clicked()));
删除两个关联对象的连接
QObject::disconnect(ui.btn_Open,0,ui.btn_ClickBool,0); //或者 ui.btn_Open->disconnect(ui.btn_ClickBool);
要把信号成功的连接到槽(或者是连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型。
这里有个例外,如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被忽略
时间: 2024-09-25 07:00:27