使用Qt Horizo ntalslider更改textedit的值

问题描述 投票:0回答:1

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

我试图使用信号/插槽方法将Horizontalslider连接到textEdit,但它不能很好地工作。

qt
1个回答
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中获得滑块位置 - 只需像position / POINTS一样计算它。

学习Qt祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.