使用QPushButton将文本添加到QTextEdit

Add text to QTextEdit using QPushButton

本文关键字:QTextEdit 添加 文本 QPushButton 使用      更新时间:2023-10-16

只需一个简单的程序,即可在单击按钮时将文本添加到文本编辑中。。。这里有什么问题吗??


#include<QPushButton>
#include<QApplication>
#include<QTextEdit>
#include<QWidget>
#include<QHBoxLayout>
#include<QLabel>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QHBoxLayout *layout=new QHBoxLayout;
QTextEdit *text = new QTextEdit(); 
QWidget window;
QPushButton *button;
layout->addWidget(text);
button = new QPushButton();
button->setText(QChar(i+48));
QObject::connect(button,SIGNAL(clicked()),text,SLOT(setPlainText("hai")));
layout->addWidget(button);
window.setLayout(layout);
window.resize(500, 500);
window.show();
return app.exec();
}

不能那样使用connect。不能将连接的SIGNAL中不存在的参数传递给SLOT

您需要将clicked()信号连接到自己的插槽(没有参数),并自己调用setPlainText函数(或发出具有QString参数的新信号)。

另一种选择是使用QSignalMapper,如信号和插槽高级使用部分所述。

我认为这是行不通的,不能在connect语句中为插槽提供默认参数。SLOT宏实际上只是将其参数转换为字符串,并在text类的已注册插槽列表中搜索插槽名称。

您必须调用自己的插槽,该插槽不接受任何参数,并使用所需的文本手动调用setPlainText。也许Qt在这个方向上有一些助手类,但您的解决方案不应该起作用。

顺便说一句,你真的尝试过这个并得到了一个错误吗,或者你只是在这里发布了它,而没有简单地尝试一下?

您的信号和插槽不兼容。Qt为此提供文档。

请尝试访问此页面。

在这里,它说,"信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。(事实上,插槽的签名可能比它接收的信号短,因为它可以忽略额外的参数。)由于签名是兼容的,编译器可以帮助我们检测类型不匹配。信号和插槽是松散耦合的:发出信号的类既不知道也不关心哪个插槽接收信号。"

信号槽机制可以与函数调用相比较(或归结为)。您正在一个发出信号的地方调用一个函数(插槽)。现在假设函数需要一些参数,但没有默认值。但是您正在尝试调用函数。会发生什么?。这就是代码中发生的情况。