QLineEdit 的 Qt 信号和槽

Qt signals and slots for QLineEdit

我不太理解信号和槽的工作原理。我有一个输入和一个按钮,我希望在单击按钮时在输入字段上写入一个值。请告诉我应该怎么做。

#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
#include <QLineEdit>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // Create main window.
    QWidget *window = new QWidget;
    window->setWindowTitle("Enter your age");
    window->setFixedSize(500,500);

    QLineEdit *value1= new QLineEdit;
    value1->show();

    QPushButton *button1(window)= new QPushButton;
    button1->setText("click");
    button1->show();
    button1->move(300,0);

    QObject::connect(button1,SIGNAL(clicked()),value1,SLOT(setText(2)));


    // Create layout to put widgets in place.
    QHBoxLayout *layout = new QHBoxLayout;
    //layout->addWidget(value1);
    //layout->addWidget(button1);
    // Put layout in main window.
    window->setLayout(layout);
    window->show();
    return app.exec();
}

这个不行,因为你在连接的时候没有设置slot的函数参数,但是信号发出的时候会提供参数。

clicked() 信号不提供 QString,因此没有任何内容可传递给函数 setText(const QString &)

您可以做的是定义另一个函数作为中间步骤。单击按钮将连接到您的函数,这将决定将行文本设置为什么。这可以在所谓的 lambda 表达式中完成,as per the docs here.

示例

QObject::connect(button1, &QPushButton::clicked, [=] {
        value1->setText("2");
    });

这应该适用于您的代码,您还需要将一行更改为

QPushButton *button1= new QPushButton(window);