Qt 中的 Sphinx 集成

Sphinx Integration in Qt

我想集成 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 项目,这样就不需要包含多个文件,或者包含多个文件是可行的方法,而我只是处理不当?

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

main.cpp

#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"