簡體   English   中英

使用Q_INVOKABLE將C ++與QML連接

[英]Connecting C++ with QML using Q_INVOKABLE

我有一個Qt功能:

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

我從QML收集數據,我想將數據傳遞給Qt中的這個函數。 所以我知道我需要使用Q_INVOKABLE但不知道如何使用它。

還有一件事是,當調用上面的這個時,可以調用其他一些函數。
例如:我調用上面的函數,但在她的身體中我調用了refresh()函數。 這可能嗎?

為了能夠從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 );

注冊后,您可以從QML調用buttonClicked:

_mainWindow.buttonClicked("foo", "bar", "c", "d")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM