Question

First off, I'm using the Qt 4 libraries and C++.

Is there a way to be notified (signal, event, ?) when a property (dynamic or otherwise) changes on a QObject?

I can't modify the QObject class as it is part of the Qt4 library. More info about QObject here.

Was it helpful?

Solution

You can install an event filter on QObject instances.
So if you want to be notified for windowsTitle changes you can install an eventfilter that captures QEvent::WindowTitleChange events.
For example:

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);

//...

OTHER TIPS

For dynamic properties, you can use QDynamicPropertyChangeEvent.

Hope it helps !

I'm not familiar with the "language" but in general, what you want to do follows the Observer design pattern. You see, in this pattern, what you do is to register Observers to the Observable Objects i.e. QObjects. Inside the Observable object, you will keep track of a list of its observers. When a change in the QObjects' state occured, you could notify all of the observers using the observer list it has.... In essence, you create an Interface which Observers can implement... This Interface will become you way of notifying the different Observers of the Observable Object. just a thought!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top