首先,我使用的是Qt 4庫和C++。當QObject中的屬性發生變化時,是否有通知?
當QObject
上的某個屬性(動態或其他)發生更改時,是否有通知(信號,事件?)的方法?
我不能修改QObject
類,因爲它是Qt4庫的一部分。有關更多信息QObject
here。
首先,我使用的是Qt 4庫和C++。當QObject中的屬性發生變化時,是否有通知?
當QObject
上的某個屬性(動態或其他)發生更改時,是否有通知(信號,事件?)的方法?
我不能修改QObject
類,因爲它是Qt4庫的一部分。有關更多信息QObject
here。
您可以在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);
//...
我對「語言」並不熟悉,但總的來說,您希望遵循Observer設計模式。您看到,在這種模式中,您所做的是將觀察者註冊到可觀察對象,即QObject。在Observable對象內部,您將跟蹤其觀察者列表。當QObject的狀態發生變化時,您可以使用觀察者列表通知所有觀察者......實際上,您創建了一個觀察者可以實現的接口......此接口將成爲您通知可觀察對象的不同觀察者。只是一個想法!
哈,我一定是失明的。我正在查看事件文檔並閱讀所有內容,但事件發生了。謝謝。 – darkadept 2010-03-11 14:25:58