Это правильный способ использовать глобальный QObject для перекрестного сигнала / слота вперед
Моя ситуация, большой проект Qt со многими требованиями связи QWidget.
Например, у меня есть QPushButton B и QLabel L, мне нужно нажать кнопку B, чтобы показать какой-нибудь текст на метке L или скрыть его и т. Д. Но проблема в том, что ни один из них не может получить указатель на объект друг друга, потому что оба из них, расположенных в глубоком дереве QWidget, может быть, их родительский виджет grandgrandgrand был родным, чем когда-либо.
Итак, мой вариант - создать глобальный уникальный QObject, просто для сингла / слота forwad, вот так:
class GlobalForward: public QObject
{
Q_OBJECT
public:
GlobalForward():QObject(null) {}
signal:
void SigForwardButton(bool toggle);
}
GlobalForward* gForwardObj;
int main(int argc, char* argv[])
{
QApplication app(argc, argv[]);
gForwardObj = new GlobalForward();
QWidget w;
QPushButton* button = new QPushButton(&w);
QWidget m;
QLabel* label = new QLabel(&m);
w.show();
m.show();
connect(button, &QPushButton::clicked, gForwardObj, &GlobalForward::SigForwardButton);
connect(gForwardObj, &GlobalForward::SigForwardButton, label, &QWidget::hide);
return app.exec();
}
На самом деле кнопка и метка настолько далеки, что не могут видеть друг друга. Я хочу использовать GlobalForward для констатации синглала, чтобы он работал. Более того, он может продвинуться вперед в QEvent.
Что я хочу знать, так это правильно ли решена моя проблема, и в чем ее недостаток. Кроме того, любое лучшее решение будет уместным, спасибо.