c++ - Qt:创建一个 QDoubleSlider

标签 c++ qt user-interface signals-slots qslider

我想像这样连接一个 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
}

现在我有两个问题:

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

有什么想法吗?

最佳答案

  1. parent 需要是一个 QWidget*,正如错误状态
  2. 插槽像普通成员函数一样工作。您可能应该存储一个精确的 double 作为成员,并将底层 slider 设置为适当的等效整数。请记住,只有在值确实发生变化时才发送 valueChanged 信号。

此外,您可能应该从 QWidget 继承并拥有一个 QSlider 作为 child ,因为您不希望您的类的用户更改内部的整数范围 slider 。

关于c++ - Qt:创建一个 QDoubleSlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368995/

相关文章:

c++ - strstream 和 stringstream 的区别

c++ - 使用参数执行 exe 时的 QProcess 问题

c++ - 属性的 QVariant(QString, “” ) 在属性系统中是什么意思?

java - 有什么方法可以使标签在 SWT 中可选?

用于绘制图形的 C++ 库

c++ - 斥力 vector

c++ - 自定义结构的 set_difference

c++ - 如何将 2 个不同的 QTextEdit 值显示到 QLabel 中

javascript - node.js 应用程序中的系统托盘图标

javascript - 使用 jQuery 根据更大的父元素输入焦点