是否可以将QQuickwidget::setSource()与变量(QString或QByteArray)一起使用?我知道我可以加载文件(或资源):ui->quickWidget->setSource(QUrl::fromLocalFile(":/qml/Example.qml"));但是如果我把qml代码存储在一个变量中,我只能通过先写入磁盘上的一个文件并加载该文件来解决它。
QQuickwidget::setSource()
ui->quickWidget->setSource(QUrl::fromLocalFile(":/qml/Example.qml"));
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());
nhjlsmyf2#
如果你选择文件方法,可以考虑使用The Qt Resource System。我写了一个很好的example。但是你不必这么做。另一种可能的方法是QQmlNetworkAccessManagerFactory,在这里你模拟从网络加载qml,但是从字符串加载,但是你可以从任何地方加载,比如说从一个.zip文件。最后,似乎有一种直接的方法,不要忘记您可以从QML本身执行同样的操作。
6yjfywim3#
假设“代码”是QByteArray,包含QML代码,“视图”是QQuckView或QQuickWidget类,则:
QUrl dataurl(code.toPercentEncoding().prepend("data:,")); view.setSource(dataurl); view.show();
3条答案
按热度按时间erhoui1w1#
也许在临时文件的帮助下?
https://doc.qt.io/qt-5/qtemporaryfile.html
像这样的事情(我没有太多的时间,所以我只是做了一些肮脏的):
nhjlsmyf2#
如果你选择文件方法,可以考虑使用The Qt Resource System。我写了一个很好的example。但是你不必这么做。另一种可能的方法是QQmlNetworkAccessManagerFactory,在这里你模拟从网络加载qml,但是从字符串加载,但是你可以从任何地方加载,比如说从一个.zip文件。最后,似乎有一种直接的方法,不要忘记您可以从QML本身执行同样的操作。
6yjfywim3#
假设“代码”是QByteArray,包含QML代码,“视图”是QQuckView或QQuickWidget类,则: