使用QPushButton将文本添加到QTextEdit

时间:2011-06-05 12:05:49

标签: c++ qt qt4

只需点击按钮即可向textedit添加文本的简单程序... 这里有什么不对吗?


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

3 个答案:

答案 0 :(得分:1)

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

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

另一种选择是使用QSignalMapper,如Signals and Slots高级用法部分所述。

答案 1 :(得分:0)

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

您必须调用自己的不带参数的插槽,并使用预期的文本手动调用setPlainText。也许Qt在这个方向上有一些辅助类,但你的解决方案不应该有用。

顺便问一下,您是否真的试过这个并得到错误,或者您刚刚将其发布在此处而不是简单地尝试一下?

答案 2 :(得分:0)

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

尝试访问此page

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

信号插槽机制可以与(或煮到)函数调用进行比较。您正在发出信号的地方调用函数(插槽)。现在假设函数需要一些参数,并且没有默认值。但是你试图调用这个函数。会发生什么?。这就是您的代码中发生的事情。