QT中对于有发生重载的信号时的处理办法
环境:QT5.5.1
目的:spinbox的数值变化,slider位置随之变化。
一般都是采用信号与槽机制,按照我自已惯用的格式如下:
connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue);
报错如下:
error: no matching function for call to 'MyWidget::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))'
connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue);
^
因为信号有重载,像我是上面这种找地址的方式就不明确,所以要利用函数指针,先指向一个明确的int类型的地址,再进行操作。
采用这种指针指定明确类型地址的方式可以实现功能
void (QSpinBox:: *spinSignal)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox,spinSignal,ui->horizontalSlider,&QSlider::setValue);
另外,采用QT4的信号与槽也可以实现
connect(ui->spinBox,SIGNAL(valueChanged(int)),ui->horizontalSlider,SLOT(setValue(int)));
两种方式都是通过编译且实现功能的。如果有更好的方式,欢迎补充!