繁体   English   中英

这些参数有什么区别

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM