使用Qt Horizo​​ntalslider更改textedit的值

时间:2014-08-03 09:45:50

标签: qt

我正在使用Qt 5进行GUI。我想知道如何使用textEdit来更改或设置Horizontalslider的值,它会获得一些双倍值。

我尝试使用信号/插槽方法将Horizontalslider连接到textEdit,但它并没有很好地工作。

1 个答案:

答案 0 :(得分:1)

这是一个例子。使用下一个实现创建新的类MyWindow

#include <QSlider>
#include <QLayout>
#include <QLineEdit>
#include <QDebug>
#include <QWidget>

const float MIN_VALUE = 0;
const float MAX_VALUE = 2;
const unsigned STEPS = 13;

class MyWindow : public QWidget {

    Q_OBJECT

private:
    QVBoxLayout *m_layout;
    QSlider *m_slider;
    QLineEdit *m_textEdit;

public:
    explicit MyWindow(QWidget *parent = 0): QWidget(parent)
    {
        m_layout = new QVBoxLayout(this);
        // Create horizontal slider and prepare it
        //   is it can change in range [MIN_VALUE; MAX_VALUE * STEPS]
        m_slider = new QSlider(Qt::Horizontal, this);
        m_slider->setMinimum(MIN_VALUE);
        m_slider->setMaximum(MAX_VALUE * STEPS);
        m_layout->addWidget(m_slider);

        m_textEdit = new QLineEdit(this);
        m_layout->addWidget(m_textEdit);

        this->setLayout(m_layout);
    }

    ~MyWindow(){}

    void setupWindow() {
        connect(m_slider, SIGNAL(valueChanged(int)), 
                    this, SLOT(updateTextOnSliderChange(int)));
    }

public slots:
    void updateTextOnSliderChange(int position) {
        // Calculate float position of slider
        float positionF = position / float(STEPS);
        m_textEdit->setText( QString::number(positionF, 'f', 2) );
    }
};

并使用main.cpp

#include <QApplication>
#include "mywindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWindow *window = new MyWindow;
    window->setupWindow();
    window->show();
    return a.exec();
}

代码非常自我解释。因此,主要思想是使用典型的滑块来保持其在int中的位置,设置滑块的最小和最大位置,并且每次需要在float中获得滑块位置时 - 只需将其计算为{ {1}}。

学习Qt祝你好运!