2
如何在Qt中的QML文件中使用C++類變量。我想在C++文件中設置一個基於Q_OS_Android
的變量並評估QML文件中的條件。這將如何成爲可能?在QML文件中使用C++類變量
如何在Qt中的QML文件中使用C++類變量。我想在C++文件中設置一個基於Q_OS_Android
的變量並評估QML文件中的條件。這將如何成爲可能?在QML文件中使用C++類變量
你必須在你的頭文件中聲明該變量爲屬性並在你的main中用qml註冊這個類。下面是一個類Foo和可變的QString VAR的例子:
class Foo : ...
{
Q_OBJECT
Q_PROPERTY(QString var READ getVar WRITE setVar NOTIFY varChanged)
public:
Foo();
~Foo();
QString getVar() const {return m_var;}
void setVar(const QString &var);
signals:
void varChanged();
public slots:
//slots can be called from QML
private:
QString m_var;
};
在主你有這樣的事情:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<Foo>("MyApp", 1, 0, "Foo");
QQuickView view;
view.setSource(QUrl("qrc:/main.qml"));
view.show();
return app.exec();
}
在你設爲Qml文件,你可以使用簡單的導入類:
import MyApp 1.0
然後使用你的類,你將任何正常的QML類型:
Foo{
id: myClass
var: "my c++ var"
...
}
你的回答是正確的,但我不確定什麼「//只能從QML調用插槽」。如果標記爲Q_INVOKABLE且Qml中註冊了參數和返回類型,則可以從Qml調用任何函數。 – 2015-02-11 09:48:55
是的,你是對的。但是我發現只使用插槽就簡單多了,因爲它們可以從QML調用,而無需註冊或標記它們! PS:我會從我的答案中刪除「唯一」;) – luffy 2015-02-11 09:54:12
你可以更簡單地找到它,但是'Q_INVOKABLE'很重要。例如。你可以給'Q_INVOKABLE'標記'QAbstractListModel'派生類的方法,並在QML中使用它們,而不是爲原始類中的方法添加「QML-friendly」包裝方法。這是介紹'Q_INVOKABLE'的主要目的之一。 – BaCaRoZzo 2015-02-11 10:23:58