首先,我正在使用Qt 4库和C ++。
当QObject
上的属性(动态或其他)发生变化时,有没有办法得到通知(信号,事件,?)?
我无法修改QObject
类,因为它是Qt4库的一部分。有关QObject
here。
答案 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状态发生变化时,您可以使用它拥有的观察者列表通知所有观察者....实际上,您创建了一个观察者可以实现的接口......这个接口将成为您通知可观察对象的不同观察者。只是一个想法!