Qt4 no matching function for call to 'DataBaseMain::connect(QSlider*&, void (QAbstractSlider::*)(int), DataBaseMain::TaskTrain()::__lambda0)',,怎么解决
时间: 2024-03-19 08:43:48 浏览: 122
c# 9.0新特性nint和Pattern matching的使用方法
这个错误的原因是 `connect` 函数中的槽函数参数类型不匹配。根据错误信息,`connect` 函数的第二个参数是一个指向 `QAbstractSlider` 类的成员函数的指针,而你传递的是一个 lambda 表达式。
解决这个问题的方法是,将 lambda 表达式转换成一个普通的成员函数,然后将该成员函数的指针传递给 `connect` 函数。例如:
```cpp
class DataBaseMain : public QWidget {
Q_OBJECT
public:
// ...
private slots:
void onSliderValueChanged(int value);
private:
// ...
QSlider *slider;
};
void DataBaseMain::someFunction() {
// ...
connect(slider, &QSlider::valueChanged, this, &DataBaseMain::onSliderValueChanged);
// ...
}
void DataBaseMain::onSliderValueChanged(int value) {
// 处理滑动条值改变的事件
}
```
在上面的示例中,我们定义了一个名为 `onSliderValueChanged` 的成员函数,并将其作为 `connect` 函数的第四个参数。这样做可以避免类型不匹配的问题,同时也使代码更易于组织和维护。
阅读全文