什么';这些参数之间的区别是什么 我是C++新手,我正在学习QT.
以这一行为例:什么';这些参数之间的区别是什么 我是C++新手,我正在学习QT.,c++,qt,C++,Qt,以这一行为例: connect(ui->horizontalSlider, &QSlider::valueChanged, ui->progressBar, &QProgressBar::setValue); 我不明白的是,为什么要传递静态(是静态的吗?)方法valueChanged(&QSlider::valueChanged)的地址,而不是当前对象方法地址&ui->horizontalsloider->valueChanged。尽管我也可以使用第
connect(ui->horizontalSlider, &QSlider::valueChanged,
ui->progressBar, &QProgressBar::setValue);
我不明白的是,为什么要传递静态(是静态的吗?)方法valueChanged(
&QSlider::valueChanged
)的地址,而不是当前对象方法地址&ui->horizontalsloider->valueChanged
。尽管我也可以使用第二个选项。传递应该调用的成员函数的地址。
成员函数不是静态的,这意味着它需要一个对象来处理
class MyClass
{
void aFunction();
}
这里的MyClass::aFunction
是一个成员函数
编译器创建的内容与此类似
class MyClass
{
static void aFunction(MyClass *this);
}
因此,无论何时调用aFunction
比如my_instance.aFunction()
这个指针都将被隐式传递,因此调用基本上变成MyClass::aFunction(&my_instance)
。
因此,a函数
的地址对于MyClass
的每个实例都是相同的。
然而要执行a函数
,您需要一个MyClass
的实例
这就是为什么在您的情况下,您必须为实例ui->horizontalsloider
以及要在其上调用的函数&QSlider::valueChanged
提供connect
我所描述的是一种过于简单化的说法,所以对此持保留态度。
此外,当您使用虚拟函数时,情况会发生变化。我相信这是Qt在应用程序周围分发异步事件的独特方式的一部分。您不会传递接收事件的对象,而是传递关联的方法。我现在猜,但我认为两者之间的区别在于Qt将在后台做一些额外的工作,从您提供的对象获取方法调用。它们不同于一般指针。