QLineEdit

时间:2017-04-27 00:45:14

标签: qt qt-signals

我在理解信号和插槽如何工作方面遇到了一些麻烦。我有一个输入和一个按钮,我想在单击按钮时在输入字段上写入一个值。请告诉我应该怎么做。

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

1 个答案:

答案 0 :(得分:2)

这不起作用,因为连接时没有设置插槽的功能参数,但是在发出信号时会提供参数。

clicked()信号未提供QString,因此无法传递给函数setText(const QString &)

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

实施例

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

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

QPushButton *button1= new QPushButton(window);