Qt4 当QoObject中的属性发生更改时,是否有一种通知方式? 首先,我使用Qt 4库和C++ +/p>

Qt4 当QoObject中的属性发生更改时,是否有一种通知方式? 首先,我使用Qt 4库和C++ +/p>,qt4,properties,qobject,Qt4,Properties,Qobject,当QObject上的属性(动态或其他)发生更改时,是否有方法通知(信号、事件等) 我无法修改QObject类,因为它是Qt4库的一部分。关于QObject的更多信息我不熟悉“语言”,但一般来说,您想要做的是遵循观察者设计模式。你看,在这个模式中,你要做的是注册观察者到可观察的对象,即QoObject。在可观察对象内部,您将跟踪其观察者列表。当QoObject的状态发生变化时,您可以使用其拥有的观察者列表通知所有观察者。。。。本质上,您创建了一个观察者可以实现的接口。。。此界面将成为通知不同观察者

QObject
上的属性(动态或其他)发生更改时,是否有方法通知(信号、事件等)


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

的更多信息我不熟悉“语言”,但一般来说,您想要做的是遵循观察者设计模式。你看,在这个模式中,你要做的是注册观察者到可观察的对象,即QoObject。在可观察对象内部,您将跟踪其观察者列表。当QoObject的状态发生变化时,您可以使用其拥有的观察者列表通知所有观察者。。。。本质上,您创建了一个观察者可以实现的接口。。。此界面将成为通知不同观察者可观察对象的方式。只是一个想法

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

希望有帮助

您可以在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);

//...
类WindowsTitleWatcher:公共QObject
{
Q_对象
公众:
WindowsTitleWatcher(QObject*父对象):QObject(父对象){
}
信号:
无效标题更改(常量字符串和标题);
受保护的:
bool eventFilter(QObject*obj,QEvent*event){
如果(事件->类型()==QEvent::WindowTitleChange){
QWidget*const window=qobject_cast(obj);
如果(窗口)
发射标题更改(窗口->窗口标题());
} 
返回QObject::eventFilter(对象,事件);
}
};
//...
QDialog*const dialogToWatch=。。。;
QObject*const whowantobenotified=。。。;
QObject*const titleWatcher=新窗口titleWatcher(dialogToWatch);
通知谁->连接(
标题观察者,
信号(标题更改(QString)),
插槽(onTitleChanged(QString));
对话框ToWatch->installEventFilter(标题查看器);
//...

这是正确的想法,但我不能更改QObject,因为它是我正在使用的库的一部分。我编辑了我的问题以澄清这一事实。但你可以从中创建一个子类,:)让子类成为你的可观察对象…在Qt中,你可以使用内置信号槽机制来实现观察者模式。@TimW,现在我知道了,tnx,但问这个问题的不是我…:)我试图查看QWidget的windowTitle属性,但由于它不是动态属性,因此不会触发该事件。我最终使用了一个动态事件来传递我的信息,它就像一个符咒。谢谢使用setProperty(名称、值)设置属性,而不是使用属性设置器来获取属性更改通知。哈,我必须是盲的。我在看活动文档,除了那个活动之外,我什么都读了。谢谢