我正在尝试做一个简单的任务,比如从C ++更改某个QML对象的属性(text :),但我却失败了。任何帮助表示赞赏。
我没有收到任何错误,窗口显示,只是文本属性不会改变(至少我认为)它应该。 甚至是我在这里做错了什么?!!
我正在尝试的是:
的main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQuickItem>
#include <QQmlEngine>
#include <QQmlComponent>
#include <QString>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent component(&engine, QUrl::fromLocalFile("main.qml"));
QObject *object = component.create();
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QString thisString = "Dr. Perry Cox";
object->setProperty("text", thisString); //<--- tried instead of thisString putting "Dr. ..." but nope.
delete object;
return app.exec();
}
main.qml
import QtQuick 2.2
import QtQuick.Window 2.1
Window {
visible: true
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Text {
id: whot
text: ""
anchors.centerIn: parent
font.pixelSize: 20
color: "green"
}
}
答案 0 :(得分:4)
当您致电QObject *object = component.create();
时,您可以访问根上下文,即Window
组件及其属性。
要访问Text
属性,您可以创建如下属性别名:
Window {
property alias text: whot.text
...
Text {
id: whot
text: ""
...
}
}
这样,您就可以在whot
的上下文中访问text
的{{1}}媒体资源。
还有另一种略微圆润的方式。将Window
属性而不是objectName
(或两者,如果您仍然需要id
)分配给id
:
whot
现在您可以在代码中执行此操作:
Text {
id: whot // <--- optional
objectName: "whot" // <--- required
text: ""
...
}
旁注:在调用QObject *whot = object->findChild<QObject*>("whot");
if (whot)
whot->setProperty("text", thisString);
之前,我不认为您应该删除object
。否则,它会......好吧,被删除。 :)
答案 1 :(得分:0)
f(std::ostream& stream)
{
BIT16* m_pMeans, x;
int iSize = 32;
x = (BIT16*) Alloc16Address((void**)&m_pMeans,MEAN_SIZE*iSize);
stream.read((char*)m_pMeans, MEAN_SIZE*iSize); // <<<< access volation
}
用于qml
#include <QQmlContext>
#include <qquickview.h>
#include <qdir.h>
QQmlApplicationEngine engine;
QString root = QCoreApplication::applicationDirPath();
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow*>(topLevel);
window->setProperty("root", root);
答案 2 :(得分:0)
对于 QML 属性,您应该使用 QQmlProperty 代替:
QQmlProperty::write(whot, "text", thisString);