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"
我想集成 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"