Чтобы иметь возможность вызывать метод из QML, вы должны пометить его как 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 );
После регистрации вы можете вызвать buttonClicked из QML:
_mainWindow.buttonClicked("foo", "bar", "c", "d")