QT中的槽函数
怎么给槽函数传递参数
方法一:信号传递
//Widget.h
signals:
void signal(int i);
slots:
void showint(int i);
//widget.cpp
connect(this,&Widget::signal,this,&Widget::showint);
emit:signal(10);
void Widget::showint(int i){
qDebug()<<i;
}
通过信号来传递参数。
方法二:lambda表达式
//Widget.h
slots:
void showstr(QString str);
//Widget.cpp
connect(ui->cancel,&QPushButton::clicked,[this](){
showstr("hello");
});
void Widget::showstr(QString str){
qDebug()<<str;
}
lambda表达式:[capture//捕获变量] (parameters//参数列表) -> return_type//返回值 { function_body }
[]
:不捕获任何外部变量。[&]
:通过引用捕获所有外部变量。[=]
:通过值捕获所有可命名的外部变量。[this]
:捕获this
指针
方法三:std::bind()
connect(ui->cancel,&QPushButton::clicked,this,
std::bind(&Widget::showstr,this,"hello"));
std::bind(“成员函数的绑定”,“实例参数的绑定”,“参数的绑定”)
注意:以下写法是错误的
connect(ui->cancel, &QPushButton::clicked, this, std::bind(showstr, "hello"))
因为bind()绑定了一个非静态成员函数,但是没有以对象(因此需传入this
)作为参数来调用它,非静态成员函数需要一个类的实例(即对象)来调用,因为它们可以访问类的成员变量和成员函数。
如果槽函数有返回值
省流:可以有,但没用
在Qt中,槽函数(slot)可以有返回值,但在信号(signal)和槽(slot)的机制中,返回值通常不会被使用或传递。通常,信号和槽的设计目的是为了响应特定事件和进行处理,而不是为了返回值。
在处理事件时想要获取某些结果,做法可以为:
使用类内成员变量
将计算或处理逻辑放在一个普通函数中,然后在槽函数中调用这个函数。
文档信息
- 本文作者:wangwang
- 本文链接:http://anshichifan.xyz/2023/10/11/QT%E4%B8%AD%E7%9A%84%E6%A7%BD%E5%87%BD%E6%95%B0/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)