c++ 从QString变量加载QML

oxosxuxt  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(158)

是否可以将QQuickwidget::setSource()与变量(QString或QByteArray)一起使用?
我知道我可以加载文件(或资源):ui->quickWidget->setSource(QUrl::fromLocalFile(":/qml/Example.qml"));
但是如果我把qml代码存储在一个变量中,我只能通过先写入磁盘上的一个文件并加载该文件来解决它。

erhoui1w

erhoui1w1#

也许在临时文件的帮助下?
https://doc.qt.io/qt-5/qtemporaryfile.html
像这样的事情(我没有太多的时间,所以我只是做了一些肮脏的):

QQmlApplicationEngine engine;
QString qmlFile =
        QString("import QtQuick 2.15\n")
        .append("import QtQuick.Window 2.12\n")
        .append("import QtQuick.Controls 2.12\n")
        .append("Window {\n")
        .append("id: root\n")
        .append("width: 640\n")
        .append("height: 480\n")
        .append("visible: true\n")
        .append("color: 'green'\n")
        .append("}");
QTemporaryFile file;
if(file.open())
{
    file.write(qmlFile.toUtf8());
}
file.close();
engine.load(file.fileName());
nhjlsmyf

nhjlsmyf2#

如果你选择文件方法,可以考虑使用The Qt Resource System。我写了一个很好的example。但是你不必这么做。另一种可能的方法是QQmlNetworkAccessManagerFactory,在这里你模拟从网络加载qml,但是从字符串加载,但是你可以从任何地方加载,比如说从一个.zip文件。最后,似乎有一种直接的方法,不要忘记您可以从QML本身执行同样的操作。

6yjfywim

6yjfywim3#

假设“代码”是QByteArray,包含QML代码,“视图”是QQuckView或QQuickWidget类,则:

QUrl dataurl(code.toPercentEncoding().prepend("data:,"));
view.setSource(dataurl);
view.show();

相关问题