1

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

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

4

2 回答 2

2

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

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

并使用

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

达到你想要的行为。

我希望这会有所帮助。

于 2010-07-05T07:55:17.210 回答
0

你到底想做什么?现在有了工作方式,因为您将具有 int 参数的信号连接到带有字符串参数的插槽,另一件事是信号插槽不适合这种用途,您只需说连接了哪个函数并且他们在它们之间传递参数您自己不传递值,您没有正确使用它们阅读http://doc.trolltech.com/4.6/signalsandslots.html上的文档以获取正确的使用示例。

于 2010-07-05T08:39:02.310 回答