从QSlider发送信号到QLineEdit槽

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

我有一个水平滑块,我希望在更改滑块值时更新行编辑。

我写了这个,但什么也没发生:

connect(ui->horizontalSlider1, SIGNAL(&QSlider::valueChanged), ui->lineEdit2, SLOT(&QLineEdit::setText));

我可以看到

valueChanged
有一个类型为
int
的参数,但是
setText
采用不同类型的参数。

我在构建过程中没有收到错误,并且当我运行应用程序时没有任何反应。

这样做的正确方法是什么?

c++ qt signals-slots qt-signals
2个回答
0
投票

首先,你的语法是错误的,正确的是

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));
});

0
投票

首先更新 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.