Прежде всего я пользуюсь QT 4 библиотеки и C++.
Существует ли путь, который будет уведомлен (сигнал, событие?), когда свойство (динамичный или иначе) изменяется на a QObject
?
Я не могу изменить QObject
класс, поскольку это - часть библиотеки Qt4. Больше информации о QObject
здесь.
На экземплярах 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);
//...
Для динамических свойств можно использовать QDynamicPropertyChangeEvent .
Надеюсь, это поможет!
Я не знаком с «языком», но в целом то, что вы хотите делать, следует шаблону проектирования Observer. Вы видите, что в этом шаблоне вы регистрируете наблюдателей для наблюдаемых объектов, то есть QObjects. Внутри объекта Observable вы будете отслеживать список его наблюдателей. Когда произошло изменение в состоянии QObjects, вы могли уведомить всех наблюдателей, используя список наблюдателей, который у него есть .... По сути, вы создаете интерфейс, который могут реализовать наблюдатели ... Этот интерфейс станет для вас способом уведомления разные наблюдатели наблюдаемого объекта. просто мысль!