Qt:创建一个 QDoubleSlider

Posted

技术标签:

【中文标题】Qt:创建一个 QDoubleSlider【英文标题】:Qt: Creating a QDoubleSlider 【发布时间】:2014-01-26 20:49:20 【问题描述】:

我想像这样连接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 是如何工作的,因此我什至不知道如何实现该插槽。

有什么想法吗?

【问题讨论】:

【参考方案1】:
    parent 必须是 QWidget*,就像错误状态一样 槽像普通的成员函数一样工作。您可能应该将精确的double 存储为成员,并将底层滑块设置为适当的整数等效值。请记住,仅在值确实发生变化时才发送 valueChanged 信号。

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

【讨论】:

【参考方案2】:
    只需简单地将您的 QObject 替换为 QWidget,因为 QSlider 构造函数是 QSlider ( QWidget * parent = 0 ) 您最好有一个名为 setDoubleValue(double givenValue) 的新插槽并连接到该插槽。在这个插槽中,它很简单。像 void QDoubleSlider::setDoubleValue(double givenValue) setValue(static_cast<int>(givenValue));

【讨论】:

以上是关于Qt:创建一个 QDoubleSlider的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Qt 创建者创建一个非常简单的项目时遇到 Qt 中的“分段错误”

QT学习-创建第一个QT程序

Qt下创建窗口的问题

使用QT创建系统托盘

Qt:创建一个“svg图像按钮”

创建自定义 QT 库