Существует ли путь, который будет уведомлен, когда свойство изменяется в QObject?

Прежде всего я пользуюсь QT 4 библиотеки и C++.

Существует ли путь, который будет уведомлен (сигнал, событие?), когда свойство (динамичный или иначе) изменяется на a QObject?

Я не могу изменить QObject класс, поскольку это - часть библиотеки Qt4. Больше информации о QObject здесь.

5
задан darkadept 8 March 2010 в 07:23
поделиться

3 ответа

На экземплярах QObject можно установить фильтр событий .
Поэтому, если вы хотите получать уведомления об изменениях windowsTitle, вы можете установить фильтр событий, который записывает события QEvent::WindowTitleChange.
Например:

class WindowsTitleWatcher : public QObject
{
    Q_OBJECT
public:
    WindowsTitleWatcher(QObject *parent) : QObject(parent) {
    }

signals:
    void titleChanged(const QString& title);

protected:
    bool eventFilter(QObject *obj, QEvent *event){ 
        if(event->type()==QEvent::WindowTitleChange) {
            QWidget *const window = qobject_cast<QWidget *>(obj);
            if(window)
                emit titleChanged(window->windowTitle());
        } 
        return QObject::eventFilter(obj, event);
    }
};

//...
QDialog *const dialogToWatch = ...;
QObject *const whoWantToBeNotified = ...;
QObject *const titleWatcher = new WindowsTitleWatcher(dialogToWatch);
whoWantToBeNotified->connect(
    titleWatcher, 
    SIGNAL(titleChanged(QString)), 
    SLOT(onTitleChanged(QString)));
dialogToWatch->installEventFilter(titleWatcher);

//...
5
ответ дан 13 December 2019 в 05:34
поделиться

Для динамических свойств можно использовать QDynamicPropertyChangeEvent .

Надеюсь, это поможет!

7
ответ дан 13 December 2019 в 05:34
поделиться

Я не знаком с «языком», но в целом то, что вы хотите делать, следует шаблону проектирования Observer. Вы видите, что в этом шаблоне вы регистрируете наблюдателей для наблюдаемых объектов, то есть QObjects. Внутри объекта Observable вы будете отслеживать список его наблюдателей. Когда произошло изменение в состоянии QObjects, вы могли уведомить всех наблюдателей, используя список наблюдателей, который у него есть .... По сути, вы создаете интерфейс, который могут реализовать наблюдатели ... Этот интерфейс станет для вас способом уведомления разные наблюдатели наблюдаемого объекта. просто мысль!

0
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: