首先,我使用的是 Qt 4 库和 C++。
当属性(动态或其他)发生变化时,是否有办法通知(信号、事件、?)QObject
?
我无法修改QObject
该类,因为它是 Qt4 库的一部分。QObject
关于这里的更多信息。
首先,我使用的是 Qt 4 库和 C++。
当属性(动态或其他)发生变化时,是否有办法通知(信号、事件、?)QObject
?
我无法修改QObject
该类,因为它是 Qt4 库的一部分。QObject
关于这里的更多信息。
对于动态属性,您可以使用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);
//...
我不熟悉“语言”,但总的来说,你想做的事情遵循观察者设计模式。你看,在这个模式中,你所做的是将观察者注册到可观察对象,即 QObjects。在 Observable 对象中,您将跟踪其观察者的列表。当 QObjects 的状态发生变化时,您可以使用它拥有的观察者列表通知所有观察者......本质上,您创建了一个观察者可以实现的接口......这个接口将成为您通知对象的方式可观察对象的不同观察者。只是一个想法!