为什么追加Slot不起作用?

时间:2010-07-05 07:46:54

标签: c++ qt signals-slots

当我尝试进行以下简单连接时,我遇到了问题

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。我错过了什么?帮助将不胜感激!

2 个答案:

答案 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的文档以获取正确的用法示例。