Чтение файла из рабочего каталога QtWebEngine
Здравствуйте! Я пытаюсь установить URL-адрес QWebEngine для файла index.html, который находится в рабочем каталоге. Я пытаюсь использовать файл, задав URL-адрес ./index.html
но он не может найти файл.
Здесь находятся мои файлы
содержание (рабочий каталог)
- main.cpp
- content.pro
- index.html
Как я могу открыть index.html через QWebEngine, не используя полный системный путь?
вот мой код
#include <QApplication>
#include <QWebEngineView>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QWebEngineView view;
view.setUrl(QUrl(QStringLiteral("file:///./index.html")));
view.resize(1024, 750);
view.show();
return app.exec();
}
3 ответа
Попробуйте переместить html-файл в каталог сборки вашего проекта (в настоящее время вы храните его в исходном каталоге). Затем вы можете создать свой URL следующим образом:
QUrl url = QUrl::fromLocalFile(QDir::currentPath() + "/index.html");
и установите его на вид:
QWebEngineView view;
view.setUrl(url);
view.resize(1024, 750);
view.show();
Как Паоло указал в своем ответе, вы, вероятно, строите вне источника, так что ваш index.html
файл должен находиться в папке где content.exe
создан, а не в исходной папке.
Чтобы сделать это менее сложным и безопасным, Qt поддерживает встраивание файлов в.exe через файлы ресурсов Qt (.qrc). Их можно легко создать в Qt Creator, и после добавления в проект встроенные файлы доступны через qrc:///
префикс.
Таким образом, в вашем примере кода после добавления файла.qrc в ваш проект и добавления к нему index.html вы должны настроить свой код следующим образом:
view.setUrl(QUrl(QStringLiteral("qrc:///index.html")));
Это дает преимущество работы независимо от типа сборки или местоположения, и это намного проще, чем пытаться добавить шаг копирования файла в файл проекта (или каждый раз вручную копировать файл)
С http://doc.qt.io/qt-5/qurl.html
qDebug() << QUrl("main.qml").isRelative(); // true: no scheme
qDebug() << QUrl("qml/main.qml").isRelative(); // true: no scheme
qDebug() << QUrl("file:main.qml").isRelative(); // false: has "file" scheme
qDebug() << QUrl("file:qml/main.qml").isRelative(); // false: has "file" scheme
Попробуйте: view.setUrl(QUrl(QStringLiteral("index.html")));