2015-10-07 5 views
1

У меня уже есть приложение на месте и теперь его настраиваю. В связи с этим я вводил новый сигнал, который должен испускаться при испускании другого сигнала. Возможно ли это в Qt?Есть ли способ запуска сигнала от другого сигнала в Qt?

Дать слот просто испускать этот сигнал чувствует себя так примитивно и хромой ...

Детализация дальше, я должен подключить кнопку signalClicked() на мой собственный сигнал сказать sendSignal (enumtype) ...

EDIT: Забыл отметить, что мне нужно отправить данные со вторым сигналом.

+2

Просто подключите один сигнал к другому: 'connect (SIGNAL (signal1()), SIGNAL (signal2());' – vahancho

+0

http://doc.qt.io/qt-5/signalsandslots.html#signals-and -slots –

ответ

5

Да, это возможно без создания дополнительного слота. Просто подключите сигнал к сигналу:

connect(this,SIGNAL(someSignal()),this,SIGNAL(anotherSignal())); 

More information in doc.

Edit:

Вы можете обмениваться данными в связи, как обычно. Грязный пример:

QWidget* obj = new QWidget; 
obj->setWindowTitle("WindowTitle"); 
//share data, pass wrong data to the signal 
QObject::connect(obj,SIGNAL(objectNameChanged(QString)),obj,SIGNAL(windowTitleChanged(QString))); 
QObject::connect(obj,&QWidget::windowTitleChanged,[](QString str) {qDebug() << str;}); 
obj->setObjectName("ObjectName"); 
qDebug() << "But window title is"<< obj->windowTitle(); 
obj->show(); 

Выход:

"ObjectName" 
But window title is "WindowTitle" 

Но нет никакого способа сделать что-то вроде:

connect(this,SIGNAL(someSignal()),this,SIGNAL(anotherSignal("with custom data"))); 

В этом случае вам нужен отдельный слот.

+0

Спасибо за ответ. Я забыл добавить деталь. Пожалуйста, см. мое редактирование. –

+0

@ XavierGeoffrey Смотрите мои правки. – Chernobyl

+0

oh damn ... но спасибо за помощь :) –

Смежные вопросы