簡體   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