我想要移动滑块和变化值,以显示在液晶屏上的数字和Qt中的进度条。我在mainWindow构造函数中使用连接函数,如下所示
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->progressBar,&QProgressBar::setValue);
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->lcdNumber, &QLCDNumber::display);但是第二个函数返回
error: no matching function for call to 'MainWindow::connect(QSlider*&, void (QAbstractSlider::*)(int), QLCDNumber*&, <unresolved overloaded function type>)'为什么会发生这种情况?
谢谢
发布于 2021-02-01 07:31:11
由于参数类型不匹配而发生错误。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,它是C++14的QOverload包装器。
https://stackoverflow.com/questions/65983928
复制相似问题