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