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);
我不太理解信号和槽的工作原理。我有一个输入和一个按钮,我希望在单击按钮时在输入字段上写入一个值。请告诉我应该怎么做。
#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);