小编akn*_*new的帖子

qml + 主从

我想将 qml 与主从接口一起使用,但我不知道如何以正确的方式将当前项目传递到详细视图。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,工作正常),我看到两种传递项目的方法:

  1. 使用具有静态名称(如 QSqlRecord 字段名称)的字段创建 C++ 类,并将其传递给 qml w->rootContext()->setContextProperty()(w 是 QDeclarativeView *),但现在我不使用这样的任何类,并且可以更改我的数据库和 qml 视图,而无需更改 C++ 代码,我想要保存它

  2. 在任何细节 qml 中创建很多属性,例如

    Rectangle {
      id: mainRect
      property alias myFieldName: txt_nominal.text
      Column {
    
        width: parent.width
        Text {
            id: txt_nominal
            font.bold: true
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

w->rootContext()->setContextProperty(record.fieldName(i),record.field(i).value());并通过设置(记录 - 当前行的 QSqlRecort)从 C++ 代码设置此属性

有没有更简单的方法来解决我的问题?

PS我上面写的代码没有检查准确性,而是为了更清楚地表达我的意思而编写的

UPD

也许这对某人有用,我发现了第三种方法,而是第二种方法的修改 - 您可以将字段包装到 QVariantMap 中并仅将一个对象传递给 qml。这正是我想要的

在.cpp中:

QVariantMap testObject;
testObject["testField"]="first string from cpp";
testObject["testField2"]="second string from cpp";
rootContext()->setContextProperty("testObject",testObject);
Run Code Online (Sandbox Code Playgroud)

在 qml 中:

Text { …
Run Code Online (Sandbox Code Playgroud)

c++ qt master-detail qml

5
推荐指数
1
解决办法
1139
查看次数

标签 统计

c++ ×1

master-detail ×1

qml ×1

qt ×1