我想像这样将QDoubleSpinBox
与QSlider
连接:
QObject::connect(ui->myDoubleSpinBox, SIGNAL(valueChanged(double)),
ui->mySlider, SLOT(setValue(double)));
QObject::connect(ui->mySlider, SIGNAL(valueChanged(double)),
ui->myDoubleSpinBox, SLOT(setValue(double)));
这将不起作用,因为QSlider仅处理int值。所以我认为我需要向QSlider添加自定义插槽。
我考虑过要创建一个从QSlider派生的新类,然后实现该插槽,如下所示:
QDoubleSlider.hpp
#ifndef QDOUBLESLIDER_H
#define QDOUBLESLIDER_H
#include <QSlider>
class QDoubleSlider : public QSlider
{
Q_OBJECT
public:
explicit QDoubleSlider(QObject *parent = 0);
signals:
public slots:
void setValue(double givenValue);
};
#endif // QDOUBLESLIDER_H
QDoubleSlider.cpp
#include "qdoubleslider.h"
QDoubleSlider::QDoubleSlider(QObject *parent) :
QSlider(parent)
{
}
void QDoubleSlider::setValue(double givenValue)
{
// code
}
现在我有两个问题:
编译器抱怨在构造函数中从
QObject*
到QWidget*
的无效转换。我不知道setValue如何工作,因此我什至不知道如何实现该插槽。
有任何想法吗?
最佳答案
就像错误指出的一样,parent
必须是QWidget*
插槽的工作方式类似于常规成员函数。您可能应该将精确的double
作为成员存储,并将基础滑块设置为适当的等效整数。请记住,如果值确实发生变化,则仅发送valueChanged
信号。
此外,您可能应该继承自QWidget
并以QSlider
作为子对象,因为您不希望类的用户更改内部滑块的整数范围。