有没有办法在QObject中更改属性时收到通知?

时间:2010-03-08 06:49:18

标签: qt4 properties qobject

首先,我正在使用Qt 4库和C ++。

QObject上的属性(动态或其他)发生变化时,有没有办法得到通知(信号,事件,?)?

我无法修改QObject类,因为它是Qt4库的一部分。有关QObject here

的更多信息

3 个答案:

答案 0 :(得分:7)

对于动态属性,您可以使用 QDynamicPropertyChangeEvent

希望它有所帮助!

答案 1 :(得分:5)

您可以在QObject实例上安装event filter 因此,如果您希望收到有关WindowsTitle更改的通知,可以安装一个捕获QEvent :: WindowTitleChange事件的eventfilter。 例如:

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

//...

答案 2 :(得分:0)

我不熟悉“语言”,但一般来说,你想要做的是遵循Observer设计模式。你会看到,在这种模式中,你要做的是将Observers注册到Observable Objects,即QObjects。在Observable对象中,您将跟踪其观察者列表。当QObjects状态发生变化时,您可以使用它拥有的观察者列表通知所有观察者....实际上,您创建了一个观察者可以实现的接口......这个接口将成为您通知可观察对象的不同观察者。只是一个想法!