0

是否可以QQuickwidget::setSource()与变量(QString 或 QByteArray)一起使用?

我知道我可以加载文件(或资源):ui->quickWidget->setSource(QUrl::fromLocalFile(":/qml/Example.qml"));

但是,如果我将 qml 代码存储在变量中,我只能通过首先写入磁盘上的文件并加载该文件来解决它。可以直接做吗?

4

2 回答 2

1

也许在临时文件的帮助下?

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());
于 2022-02-14T12:10:16.840 回答
0

如果您选择文件方法,请考虑使用Qt Resource System。我写了一个很好的例子。但你不必这样做。另一种可能的方法是QQmlNetworkAccessManagerFactory,您可以在其中模拟从网络加载 qml,但从字符串加载它,但您可以从任何地方加载它,例如从 .zip 文件。最后,似乎有一种直接的方法,不要忘记你可以从QML 本身做同样的事情。

于 2022-02-14T12:21:06.383 回答