[英]What's the difference between these params
我是C ++的新手,正在学习Qt。
考虑这一行:
connect(ui->horizontalSlider, &QSlider::valueChanged,
ui->progressBar, &QProgressBar::setValue);
我不明白的是为什么您传递一个静态(是静态的)方法valueChanged( &QSlider::valueChanged
)的地址&ui->horizontalSlider->valueChanged
而不是当前对象方法的地址&ui->horizontalSlider->valueChanged
地址。 虽然我可以使用第二个选项,但它也可以工作。
您传递应调用的成员函数的地址。 成员函数不是静态的,这意味着它需要一个对象来进行处理。
class MyClass
{
void aFunction();
}
这里MyClass::aFunction
是成员函数。
编译器创建的与此类似
class MyClass
{
static void aFunction(MyClass *this);
}
因此,每当调用aFunction
类的my_instance.aFunction()
, this
指针都将隐式移交,因此该调用基本上变成了MyClass::aFunction(&my_instance)
。 结果,对于每个MyClass
实例, aFunction
的地址都相同。 要执行aFunction
您需要MyClass
的实例。
这就是为什么在你的情况,你必须提供connect
与两个实例ui->horizontalSlider
以及函数被调用它&QSlider::valueChanged
。
我所描述的是过于简单化,因此请带一点盐。 而且,当您具有虚拟功能时,事情也会改变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.