只需点击按钮即可向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();
}
答案 0 :(得分:1)
你不能那样使用connect
。您无法将参数传递给已连接的SLOT
中不存在的SIGNAL
。
您需要将clicked()
信号连接到您自己的插槽(没有参数),并自己调用setPlainText
函数(或发出一个QString
参数的新信号)。
另一种选择是使用QSignalMapper
,如Signals and Slots高级用法部分所述。
答案 1 :(得分:0)
我认为这不起作用,你不能在connect
语句中给一个插槽一个默认参数。 SLOT
宏实际上只是将其参数转换为字符串,并在text
类的已注册插槽列表中搜索插槽名称。
您必须调用自己的不带参数的插槽,并使用预期的文本手动调用setPlainText
。也许Qt在这个方向上有一些辅助类,但你的解决方案不应该有用。
顺便问一下,您是否真的试过这个并得到错误,或者您刚刚将其发布在此处而不是简单地尝试一下?
答案 2 :(得分:0)
您的信号和插槽不兼容。 Qt为此提供了doc。
尝试访问此page。
在这里它说, “信号和插槽机制是类型安全的:信号的签名必须与接收时隙的签名匹配。(事实上,一个插槽的签名可能比它收到的信号更短,因为它可以忽略额外的参数。)因为签名兼容,编译器可以帮助我们检测类型不匹配。信号和插槽松散耦合:发出信号的类既不知道也不关心哪个插槽接收信号。“
信号插槽机制可以与(或煮到)函数调用进行比较。您正在发出信号的地方调用函数(插槽)。现在假设函数需要一些参数,并且没有默认值。但是你试图调用这个函数。会发生什么?。这就是您的代码中发生的事情。