-
连接
{connect(ui->添加,SIGNAL(单击(((,ui->文本,SLOT(text.append(line((;}
-
问题当我在上一行窗口中输入字符串并单击"添加"时,我想添加一个附加到下一行文本窗口的函数,但该函数不起作用。
您可以将按钮连接到lambda插槽,以这样的Qt5样式执行您想要的操作:
connect(ui->add, &QPushButton::clicked, this, [this]() {
ui->text->append(line);
} );
我假设您的'ui->add'是按钮,'ui->text'是QTextEdit吗?如果是这种情况,正如Farshid616所建议的那样,您需要使用lambda。为什么?两个原因:
- 在Qt的信号&插槽,如果要将参数传递给SLOT,则需要在SIGNAL中返回它。在您的情况下,
clicked()
不返回任何内容(请参阅此处的函数签名(,而append(const QString &text)
接受一个字符串(请参阅这里( - Lambdas是通过使用
connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
来克服这个问题的一种简单方法,在CCD_3中,我们使用lambda作为函子(参见下面的示例(。这是一个过载的连接调用(请参阅此处的签名(
QObject::connect(your_button, &QPushButton::clicked, [this]() {
your_text_edit->append(your_line_edit->text());
} );
注意:您需要";捕获";以便允许访问作为this
(即this->your_text_edit
和this->your_line_edit
(的成员的your_text_edit
和your_line_edit
。this
的捕获是参考的。如果我们更明确地写上面的代码,你可以更清楚地看到这一点:
QObject::connect(this->your_button, &QPushButton::clicked, [this]() {
this->your_text_edit->append(this->your_line_edit->text());
} );