从工作目录读取文件 QtWebEngine

Reading file from working directory QtWebEngine

您好,我正在尝试将 QWebEngine URL 设置为位于工作目录中的 index.html 文件。 我试图通过将 URL 设置为 ./index.html 来使用该文件,但它似乎无法找到该文件。

这里是我的文件所在的地方

如何在不使用完整系统路径的情况下通过 QWebEngine 打开 index.html?

这是我的代码

#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();
}

来自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")));

尝试将 html 文件移动到您的项目 build 目录(您目前将其保存在源目录中)。然后你可以这样构建你的URL:

QUrl url = QUrl::fromLocalFile(QDir::currentPath() + "/index.html");

并将其设置为视图:

QWebEngineView view;
view.setUrl(url);
view.resize(1024, 750);
view.show();

正如 p-a-o-l-o 在他的回答中指出的那样,您可能正在构建 out-of-source,因此您的 index.html 文件必须位于创建 content.exe 的文件夹中,不在源文件夹中。

为了使这更简单、更安全,Qt 支持通过 Qt 资源文件 (.qrc) 在 .exe 中嵌入文件。这些可以在 Qt Creator 中轻松创建,并且一旦添加到项目中,就可以通过 qrc:/// 前缀访问嵌入式文件。

因此在您的示例代码中,在将 .qrc 文件添加到您的项目并向其添加 index.html 之后,您可以像这样调整您的代码:

view.setUrl(QUrl(QStringLiteral("qrc:///index.html")));

这样做的好处是无论构建类型或位置如何都可以工作,而且比尝试向项目文件添加文件复制步骤(或每次手动复制文件)要简单得多