Это правильный способ использовать глобальный 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.

Что я хочу знать, так это правильно ли решена моя проблема, и в чем ее недостаток. Кроме того, любое лучшее решение будет уместным, спасибо.

0 ответов

Другие вопросы по тегам