簡體   English   中英

嘗試將水平 slider 連接到 LCD 編號和 Qt 中的進度條時出現問題

[英]Issue while trying to onnect a horizontal slider to a LCD number and a progress bar in Qt

我想移動 slider 條和要顯示在 LCD 數字中的變化值和 Qt 中的進度條。 我使用connect function int mainWindow構造函數如下

connect(ui->horizontalSlider, &QSlider::valueChanged, ui->progressBar,&QProgressBar::setValue);
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->lcdNumber, &QLCDNumber::display);

但第二個 function 返回

error: no matching function for call to 'MainWindow::connect(QSlider*&, void (QAbstractSlider::*)(int), QLCDNumber*&, <unresolved overloaded function type>)'

為什么會發生這種情況?

謝謝

由於參數類型不匹配而發生錯誤。 QSlider::valueChanged(int)有 int 參數, QProgressBar::setValue(int)也有int參數。 所以他們之間沒有問題。 另一方面QLCD::display重載了 3 種不同的類型: doubleintQString 要連接過載的信號/插槽,可以使用QOverload

connect(ui->horizontalSlider, &QSlider::valueChanged, ui->lcdNumber, QOverload<int>::of(&QLCDNumber::display));

另一種選擇是使用 lambda。 我們可以將兩個連接安裝到單個 lambda 連接中:

connect(ui->horizontalSlider, &QSlider::valueChanged, [&](int value) {
    ui->progressBar->setValue(value);
    ui->lcdNumber->display(value);
});

舊的SIGNAL()/SLOT()語法也可以解決這個問題。 但我建議不要使用它們,因為它們容易出錯且“舊”。

另外查看qOverload ,它是QOverload的 QOverload 包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM