2

我想集成 Sphinx 文档功能来帮助我的 Qt 项目。但是,当包含 Sphinx 的 HTML 文件时,格式会有所不同,并且文件链接不起作用。例如:

QFile file("/home/user1/project/Sphinx/build/html/intro.html");
if (!file.open(QIODevice::Readonly))
    qDebug() << "Didn't open file";
QTextStream in(&file);
ui->textBrowser->setText(in.readAll());

错误: QTextBrowser:_sources/intro.txt 没有文档

这将导致 textBrowser 打开正确的文件,但最终不会显示具有正确 HTML 编码的页面,并且即使这些 HTML 文件包含在同一路径中也不会跟随链接(因为我已经复制了整个 Sphinx项目进入 Qt 项目)。

是否有某种方法可以打包整个 Sphinx 项目,这样就不需要包含多个文件,或者多个文件包含是可行的方法,而我只是处理不正确?

4

1 回答 1

1

setText()您必须使用该setSource()方法并将其传递给QUrl使用该方法,而不是阅读所有文本并进行设置QUr::fromLocalFile()

主文件

#include <QtWidgets>

class Widget: public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent=nullptr):
        QWidget(parent),
        m_text_browser(new QTextBrowser)
    {
        m_lineedit = new QLineEdit;
        auto button = new QPushButton("Load");

        auto lay = new QVBoxLayout{this};
        auto hlay = new QHBoxLayout;
        lay->addLayout(hlay);
        hlay->addWidget(m_lineedit);
        hlay->addWidget(button);
        lay->addWidget(m_text_browser);

        connect(button, &QPushButton::clicked, this, &Widget::on_clicked);
    }
private slots:
    void on_clicked(){
        QString fileName = QFileDialog::getOpenFileName(this,
                                                        tr("Open Image"),
                                                        QDir::homePath(),
                                                        tr("HTML Files (*.html)"));
        m_lineedit->setText(fileName);
        m_text_browser->setSource(QUrl::fromLocalFile(fileName));
    }
private:
    QTextBrowser *m_text_browser;
    QLineEdit *m_lineedit;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.showMaximized();
    return a.exec();
}

#include "main.moc"
于 2018-11-21T18:27:45.163 回答