0

QDoubleSpinBox次のように aと aを接続したい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
}

今、私は2つの問題を抱えています:

  1. コンパイラーは、コンストラクターでのからQObject*への無効な変換について不平を言います。QWidget*
  2. setValue の仕組みがわからないため、そのスロットを実装する方法さえわかりません。

何か案は?

4

2 に答える 2

1
  1. 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 に答える