有没有办法在Qt中触发另一个信号的信号?

Xav*_*rey 5 qt signals-slots

我已经有一个应用程序,现在正在调整它.在这方面,我正在引入一个新信号,当发出另一个信号时必须发出该信号.这可能在Qt?

写一个插槽只是为了发出这个信号感觉如此原始和蹩脚......

详细说明,我必须将按钮signalClicked()连接到我自己的信号说sendSignal(enumtype)......

编辑:忘记提到我需要用第二个信号发送数据.

Che*_*byl 13

是的,可以不创建额外的插槽.只需将信号连接到信号:

connect(this,SIGNAL(someSignal()),this,SIGNAL(anotherSignal()));
Run Code Online (Sandbox Code Playgroud)

doc中的更多信息.

编辑:

您可以照常共享数据.肮脏的例子:

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();
Run Code Online (Sandbox Code Playgroud)

输出是:

"ObjectName" 
But window title is "WindowTitle" 
Run Code Online (Sandbox Code Playgroud)

但是没有办法做类似的事情:

connect(this,SIGNAL(someSignal()),this,SIGNAL(anotherSignal("with custom data")));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要一个单独的插槽.

  • QSignalMapper 已过时,但其文档显示了 lambda 的一种方式:`connect(button, &amp;QPushButton::clicked, [=] { clicked(text); });` https://doc.qt.io/qt-5/ qsignalmapper.html#details (2认同)