web-dev-qa-db-ja.com

Q_INVOKABLEを使用してC ++をQMLに接続する

私はQt関数を持っています:

_void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)
_

QMLからデータを収集し、Qtにあるこの関数にデータを渡したいです。ですから、_Q_INVOKABLE_を使用する必要があることはわかっていますが、実際の使用方法はわかりません。

そしてもう1つ、上記の特定の関数を呼び出すときに、他の関数を呼び出すことができます。
例:上記の関数を呼び出しますが、彼女の体ではrefresh()関数を呼び出します。これは可能ですか?

13
user123_456

QMLからメソッドを呼び出せるようにするには、Q_INVOKABLEでマークするか、スロットとしてマークする必要があります。 Q_INVOKABLEがスロットとして使用されることを意図していない場合は、最小限であるため、Q_INVOKABLEを使用します。

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
...
    Q_INVOKABLE void buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d );
....
};

void MainWindow::buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d ) {
   ...do stuff
   update(); //example
}

ButtonClicked()の実装には、任意のC++コードを含めることができます。

QMLからメインウィンドウインスタンスにアクセスできるようにするには、それを登録する必要があります。

QDeclarativeView* view = ...your view
view->rootContext()->setContextProperty( "_mainWindow", mainWindow );

登録すると、QMLからbuttonClickedを呼び出すことができます。

_mainWindow.buttonClicked("foo", "bar", "c", "d")
18
Frank Osterfeld