我正在使用Qt 5进行GUI。我想知道如何使用textEdit
更改或设置Horizontalslider
的值,它获得一些双倍值。
我试图使用信号/插槽方法将Horizontalslider
连接到textEdit
,但它不能很好地工作。
这是一个例子。使用下一个实现创建新类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祝你好运!