5

まず、Qt 4 ライブラリと C++ を使用しています。

プロパティ(動的またはその他)が変更されたときに通知(シグナル、イベント、?)する方法はありQObjectますか?

QObjectQt4 ライブラリの一部であるため、クラスを変更できません。詳細はQObject こちら.

4

3 に答える 3

8

動的プロパティの場合、QDynamicPropertyChangeEventを使用できます。

それが役に立てば幸い !

于 2010-03-08T07:40:27.353 に答える
5

QObject インスタンスにイベント フィルタをインストールできます。
したがって、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);

//...
于 2010-03-08T15:38:11.073 に答える
0

私は「言語」に精通していませんが、一般的に、やりたいことはオブザーバーのデザインパターンに従います。このパターンでは、Observers を Observable Objects、つまり QObjects に登録します。Observable オブジェクト内で、そのオブザーバーのリストを追跡します。QObjects の状態の変化が発生したとき、オブザーバー リストを使用してすべてのオブザーバーに通知できます..本質的に、オブザーバーが実装できるインターフェイスを作成します...このインターフェイスは、観測可能なオブジェクトの異なる観測者。ちょっとした考え!

于 2010-03-08T06:57:12.200 に答える