2010-07-05 139 views
1

我有一个问题,当我试图让下面的简单连接为什么append Slot不起作用?

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

可以成功编译并excuted.But两个append插槽似乎并不work.I've检查帮助手册约QTextEdit和有一个公共插槽append there.have我错过了什么?帮助将不胜感激!

回答

2

不幸的是,您无法通过QObject::connect将自定义值传递给您的插槽(只允许/正确解释参数的类型信息)。相反,创建自己的插槽,像

void MyWidget::mySliderChangedSlot(int newValue) 
{ 
    text->append("slider changed!"); 
} 

,并使用

QObject::connect(slider, SIGNAL(valueChanged(int)), pMyWidget, SLOT(mySliderChangedSlot(int)));

,以达到你想要的行为。

我希望有帮助。

+0

感谢您的信息。 – Young 2010-07-05 08:20:57

0

你究竟想要做什么?这现在的工作方式,因为你连接一个信号有一个int参数的插槽与一个字符串参数为一,另一件事是信号插槽不意味着这种用法,你只是说这个功能是conected和他们将参数传递给它们,而不是自己传递值,但您没有正确使用它们,请阅读http://doc.trolltech.com/4.6/signalsandslots.html的文档以获取正确的使用示例。