- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗯,我正在学习使用 QML,但我有一个疑问。在我的示例中,我在 QML 中有一个带有 ListElements 的 ListModel,并且有一个带有矩形、PathView 等的 QML 主文件。
我还有一个 QWidget,它是我的主窗口。在这个 QWidget 中,我像组件一样包含了 QML UI。好的!
如何使用 C++ 处理 QML ListElements?
注意:当我说“处理”时,我想说的是例如包含一个元素。
下面是我的代码的一些部分...
QML 包含我的 ListElement,称为“Menu1”:
import QtQuick 1.0
ListModel {
id: listMovieModel
ListElement { name: "Image 1"; iconSource: "pics/image_1.jpg" }
ListElement { name: "Image 2"; iconSource: "pics/image_2.jpg" }
ListElement { name: "Image 3"; iconSource: "pics/image_3.jpg" }
ListElement { name: "Image 4"; iconSource: "pics/image_4.jpg" }
ListElement { name: "Image 5"; iconSource: "pics/image_5.jpg" }
ListElement { name: "Image 6"; iconSource: "pics/image_6.jpg" }
}
我的主要 QML:
Rectangle {
width: 500
height: 600
color: "transparent"
PathView {
id: view
focus: true
width: parent.width
height: parent.height + y
y: -150
model: Menu1 {} //First QML showed
delegate: Image {
source: iconSource
width: 64
height: 90
scale: PathView.isCurrentItem ? 3.5 * y / parent.height : 2.0 * y / parent.height
z: y
smooth: true
}
path: MyGeometricFigure { //This a another file, but is confidential
width: view.width
height: view.height
}
preferredHighlightBegin: 0
preferredHighlightEnd: 0
highlightRangeMode: PathView.StrictlyEnforceRange
Keys.onLeftPressed: decrementCurrentIndex()
Keys.onRightPressed: incrementCurrentIndex()
}
}
当我使用 QML 作为我的 QWidget 的组件时:
MainForm::MainForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainForm)
{
ui->setupUi(this);
this->resize(1024, 576);
QDeclarativeView *myQMLTest = new QDeclarativeView(QUrl::fromLocalFile("myMainQML.qml"));
myQMLTest->setStyleSheet(QString("background: transparent; width: 600px"));
this->ui->frameListVideoGallery->layout()->addWidget(myQMLTest);
myQMLTest->setFocus();
myQMLTest->installEventFilter(this);
}
我看到了一些关于此的文章,但我无法使用 C++ 更改我的 LisModel。我在这里看到http://doc.qt.nokia.com/4.7/qdeclarativemodels.html#c-data-models此处使用 PathView http://doc.qt.nokia.com/4.7/qdeclarativeexamples.html 的示例
有人可以帮助我吗?
谢谢!
最佳答案
好吧。我认为你可以做这样的事情:
在您的主 QML 文件中添加简单的函数。
Rectangle {
// ...
function append(newElement) {
view.model.append(newElement)
}
PathView {
id: view
// ...
model: Menu1 {} //First QML showed
// ...
}
}
此方法只会调用 ListModel 中的相应方法。更多支持的方法您可以find there .
然后您只需从 C++ 代码中调用此方法即可。您可以通过以下方式执行此操作:
MainForm::MainForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainForm)
{
ui->setupUi(this);
this->resize(1024, 576);
QDeclarativeView *myQMLTest = new QDeclarativeView(QUrl::fromLocalFile ("myMainQML.qml"));
myQMLTest->setStyleSheet(QString("background: transparent; width: 600px"));
QVariantMap newElement; // QVariantMap will implicitly translates into JS-object
newElement.insert("name", "Image 13" );
newElement.insert("iconSource", "pics/image_13.jpg");
QMetaObject::invokeMethod(
myQMLTest->rootObject(), // for this object we will call method
"append", // actually, name of the method to call
Q_ARG(QVariant, QVariant::fromValue(newElement)) // method parameter
);
this->ui->frameListVideoGallery->layout()->addWidget(myQMLTest);
myQMLTest->setFocus();
myQMLTest->installEventFilter(this);
}
您应该检查this了解更多信息。
您还可以选择另一种方法:通过 qml 属性传递一些数据(使用 QDeclarativeEngine 和 QDeclarativeContext),然后在 JavaScript 代码中处理这些数据和您的列表模型。
关于qt - 如何使用 C++ 在 QML ListModel 中插入 ListElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118699/
我有一个listview谁的代表中有一个中继器,应该由文本填充。如果中继器的模型属性是这样硬编码的: model: ['String 1', 'String 2', 'String 3']; 它可以完
我有一个如下所示的 ListModel: ListModel { id: liveFeedModel ListElement { modelSrc: [ ListEle
我在 QML 中有一个自定义对象,它使用 Loader 动态加载 qml 对象并设置它的属性。我想访问 ListElement 的所有属性,并将其传递给加载器。 model: ListModel {
我是 QML、QtQuick 和 Python 的新手。我想使用 QML 显示文件列表(完整路径)。看来我应该使用 ListView 和 ListElements。我发现的示例和教程都使用硬编码且非常
我有一个 ListModel: ListModel { ListElement { property: "value" } ListElement { property:
我正在尝试使列表元素内的链接可点击。列表元素使用 :after 伪元素设置样式,因为隐藏了链接中的最后一个字符。 这是我的 jsfiddle 我需要纯 CSS 解决方案。我可以使用 JavaScrip
在 QML ListView 中,我想在单击 MouseArea 时调用一个函数: ListView{ anchors.fill: parent orientation: ListVi
Qt QML 有一个 ListModel可用于表示列表数据。它提供了许多向列表添加元素的方法,但我能找到的唯一检索元素的方法是 get()期望索引的方法。 我想检查我的 ListModel 是否包含特
我尝试访问 ListElement (QML):color 的属性; ListModel { id:myListModel ListElement {name:"one" ;color
嗯,我正在学习使用 QML,但我有一个疑问。在我的示例中,我在 QML 中有一个带有 ListElements 的 ListModel,并且有一个带有矩形、PathView 等的 QML 主文件。 我
本质上,我有一个普通的 ListView: Rectangle { id: mylist ListModel { id: mylistModel Lis
我是一名优秀的程序员,十分优秀!