QT5槽函数有重载情况下连接信号与槽
程序员文章站
2024-01-02 21:24:58
...
QT5槽函数有重载情况下连接信号与槽
方法1:使用QT4连接信号与槽的方式
使用Qt4方式连接信号和槽,槽函数必须在private slots中声明。
Qt4方式连接信号和槽,函数名连接(可带参数):
connect(btn,SIGNAL(clicked()),this,SLOT(On_btn_Clicked()));
SIGNAL()和SLOT()是Qt定义的两个宏,其返回值为C语言格式的字符串(const char*),因此采用以下的连接效果是等同的:
connect(btn,"clicked()",this,"On_btn_Clicked()");
在 Qt 4 中使用SIGNAL和SLOT两个宏来连接信号槽,这在QT5中也是支持的。如果有一个带有两个参数的信号,由于其信号槽的连接是带参数的,所以connect()函数使用Qt4的风格编写是没有问题。
方法2:使用类成员(非静态)函数指针
Qt5连接信号和槽新方法,函数地址连接:
connect(btn,&QPushButton::clicked,this,&Widget::On_btn_Clicked);
由于信号可重载(可以带不同参数),这种情况下会默认连接参数列表相同的信号与槽。
如果希望相同的信号的情况下,连接重载过的槽函数,则需通过类成员函数指针指向槽函数的目标重载。
类成员函数指针在声明时需要添加类名
void (Widget::*pf)();
//返回值类型 (类名::*pf)(参数类型列表);
pf = &Widget::On_btn_Clicked;
connect(btn,&QPushButton::clicked,this,pf);