我想像这样将QDoubleSpinBoxQSlider连接:

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作为子对象,因为您不希望类的用户更改内部滑块的整数范围。

10-06 01:51