0

我想将 aQDoubleSpinBoxQSlider这样的 a 连接起来:

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
}

现在我有两个问题:

  1. 编译器抱怨构造函数中的无效QObject*转换QWidget*
  2. 我不知道 setValue 是如何工作的,因此我什至不知道如何实现该插槽。

有任何想法吗?

4

2 回答 2

1
  1. 只需简单地将您的 QObject 替换为 QWidget,因为 QSlider 构造函数是 QSlider ( QWidget * parent = 0 )
  2. 您最好有一个名为 setDoubleValue(double givenValue) 的新插槽并连接到该插槽。在这个插槽中,它很简单。喜欢 void QDoubleSlider::setDoubleValue(double givenValue) { setValue(static_cast<int>(givenValue)); }
于 2014-01-27T19:33:14.253 回答
1
  1. parent需要是 a QWidget*,就像错误状态一样
  2. 槽像常规成员函数一样工作。您可能应该将精确存储double为成员并将底层滑块设置为适当的整数等效值。valueChanged请记住,仅在值确实发生变化时才发送信号。

此外,您可能应该继承自QWidget并将 aQSlider作为孩子,因为您不希望您的类的用户更改内部滑块的整数范围。

于 2014-01-26T20:58:14.563 回答