[英]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 種不同的類型: double
, int
, QString
。 要連接過載的信號/插槽,可以使用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.