我有一个水平滑块,我希望在更改滑块值时更新行编辑。
我写了这个,但什么也没发生:
connect(ui->horizontalSlider1, SIGNAL(&QSlider::valueChanged), ui->lineEdit2, SLOT(&QLineEdit::setText));
我可以看到
valueChanged
有一个类型为 int
的参数,但是 setText
采用不同类型的参数。
我在构建过程中没有收到错误,并且当我运行应用程序时没有任何反应。
这样做的正确方法是什么?
首先,你的语法是错误的,正确的是
connect(ui->horizontalSlider1, &QSlider::valueChanged, ui->lineEdit2, &QLineEdit::setText);
但是,参数类型不匹配,所以这不起作用。 lambda 可以最好地满足您的目的:
connect(ui->horizontalSlider1, &QSlider::valueChanged,
// use context ui-lineEdit2, capture "this" by value,
// match lamba parameters with the signal parameters
ui->lineEdit2, [this](int value){
// "this" was captured, so it is implicitly used in line below,
// and format the integer as numeric string any way you need
ui->lineEdit2->setText(QString::number(value));
});
首先更新 mainwindow.h 中的
MainWindow
类:
private:
Ui::MainWindow *ui;
void updateLineEdit(int);
然后用这个作为mainwindow.cpp的内容:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton1, SIGNAL(clicked()), ui->lineEdit1, SLOT(clear()));
connect(ui->horizontalSlider1, &QSlider::valueChanged, this, &MainWindow::updateLineEdit);
}
void MainWindow::updateLineEdit(int value) {
this->ui->lineEdit2->setText(QString::number(value));
}
MainWindow::~MainWindow()
{
delete ui;
}