將QML檔案中創建的組件指標傳遞給C 的最簡單方法是什么?從Qt檔案的解釋中,我們可以采取QML檔案根物件,然后搜索我們的組件objectName。但是在C 代碼和QML代碼中很難保持同步的組件objectName:
只是為了復制/粘貼。qml_pass_objectName_example
auto const root = engine.rootObjects()。
if(!root.empty()
{
auto const obj = root. first()->findChild<test_item*>("testItem"/span>)。
if(obj)
{
c.setup_test(obj)。
}
else; }
{
qDebug() << "無法鑄造"。
}
}
else; }
{
qDebug() << "empty";
}
我試著在Component.onCompleted上從QML代碼中傳遞組件:
main.qml (用于復制/粘貼。qml_pass_id_example/main.qml)
TestItem
{
id: testItemId;
Component.onCompleted: controller.setup_test(testItemId)。
}
main.cpp (用于復制/粘貼。qml_pass_id_example/main.cpp)
class controller : public QObject
{
Q_OBJECT
public slots:
Q_INVOKABLE void setup_test(test_item* item)
{
item->f()。
}
};
#include "main.moc"
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv)。
QQmlApplicationEngine引擎。
控制器c。
qmlRegisterType<test_item>("qml.pass. id", 1, 0, "TestItem")。)
engine.rootContext()->setContextProperty("controller", &c) 。
engine.load("qrc:/qml_pass_id_example/main.qml") 。
return app.exec()。
而且我認為這比使用objectName要簡單得多,但是我找不到任何關于將組件的ID傳遞給C 函式的相關檔案。所以我的問題是:
- 什么是最簡單的?
- 什么是最簡單的方法來傳遞QML組件指標到C ?
- 將QML組件的ID作為組件的C 型別指標傳遞給C 函式是否有效?
- Qt: 6.2.0和5.15.2. 。
- 編譯器。GCC 11.1.0和MSVC 2019. 。
- 平臺。MS Windows和GNU/Linux 。
uj5u.com熱心網友回復:
簡單的事情是值得商榷的,因為它取決于對每個案例的簡單或困難的定義,所以我將不回答這個問題,因為它不屬于SO。
是的,將任何 QML 物件匯出到 C 是有效的。id是對該物件的參考,所以你不是在傳遞 "testItemId "這個名字,而是在傳遞一個test_item物件,它的識別符號為 "testItemId"。
注意:建議不要將任何QML物件暴露給C (或者在最短的時間內暴露),因為它的生命周期是由QML管理的,所以它可能在任何時候被消除,導致你訪問不再有相關物件的指標。.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327636.html
標籤:
