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")