15

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

void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)

QML からデータを収集し、Qt にあるこの関数にデータを渡したいと思います。だから私はそれを使う必要があることを知っていますQ_INVOKABLEが、実際にそれを使う方法を知りません。

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

4

1 に答える 1

22

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")
于 2012-02-18T13:22:54.150 に答える