当我尝试进行以下简单连接时,我遇到了问题
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider(Qt::Horizontal);
QTextEdit *text = new QTextEdit("Hello QT!");
QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
QObject::connect(slider,SIGNAL(valueChanged(int)),text, SLOT(append("slider changed!")));
QObject::connect(spinBox,SIGNAL(valueChanged(int)),text, SLOT(append("spinbox changed!")));
QObject::connect(text,SIGNAL(textChanged()),spinBox,SLOT(clear()));
它可以成功编译和执行。但是两个append
插槽似乎不起作用。我已经查看了关于QTextEdit
的帮助手册,并且那里有一个公共插槽append
。我错过了什么?帮助将不胜感激!
答案 0 :(得分:2)
不幸的是,您无法通过QObject::connect
将自定义值传递到您的插槽(只允许/解释参数的类型信息)。相反,创建自己的插槽,如
void MyWidget::mySliderChangedSlot(int newValue)
{
text->append("slider changed!");
}
并使用
QObject::connect(slider, SIGNAL(valueChanged(int)), pMyWidget, SLOT(mySliderChangedSlot(int)));
实现您期望的行为。
我希望有所帮助。
答案 1 :(得分:0)
你到底想要做什么?现在有了工作方式,因为你将一个带有int参数的信号连接到一个带有一个字符串参数的插槽,另一个是信号插槽不适用于这种用法,你只是说它的功能是连接的,他们传递参数,你自己没有传递这些值,你没有正确使用它们阅读http://doc.trolltech.com/4.6/signalsandslots.html的文档以获取正确的用法示例。