Интеграция сфинкса в Qt - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы интегрировать функциональность документации Sphinx, чтобы помочь с моим проектом Qt.Однако при включении файлов HTML для Sphinx форматирование выглядит иначе, и ссылки на файлы не работают.Например:

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).

Isесть какой-нибудь способ упаковать весь проект Sphinx так, чтобы включение нескольких файлов было ненужным или включение нескольких файлов - путь, и я просто неправильно его обрабатываю?

1 Ответ

0 голосов
/ 21 ноября 2018

Вместо чтения всего текста и установки его с помощью setText() вы должны использовать метод setSource() и передать его QUrl с помощью метода QUr::fromLocalFile().

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