почему добавить слот не работает? - PullRequest
1 голос
/ 05 июля 2010

У меня проблема при попытке выполнить следующие простые подключения

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 ]

2 голосов
/ 05 июля 2010

К сожалению, вы не можете передавать пользовательские значения в ваши слоты через QObject::connect (только информация о типе для аргументов разрешена / интерпретирована правильно).Вместо этого создайте свой собственный слот, например,

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

и используйте

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

для достижения желаемого поведения.

Я надеюсь, чтопомогает.

0 голосов
/ 05 июля 2010

Что именно вы пытаетесь сделать?Теперь у этого есть способ работать, потому что вы подключаете сигнал, имеющий параметр int, к слоту с строковым параметром для одного, другое дело в том, что сигнальные слоты, где они не предназначены для такого использования, вы просто говорите, что функция подключенаони передают параметры между ними, вы сами не передаете значения, вы не используете их правильно, прочитайте документацию по http://doc.trolltech.com/4.6/signalsandslots.html для правильных примеров использования.

...