Чтение файла из рабочего каталога 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")));

Другие вопросы по тегам