我在理解信号和插槽如何工作方面遇到了一些麻烦。我有一个输入和一个按钮,我想在单击按钮时在输入字段上写入一个值。请告诉我应该怎么做。
#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();
}
答案 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);