void ArthurFrame::showSource() { // Check for existing source if (findChild<QTextBrowser *>()) return; QString contents; if (m_sourceFileName.isEmpty()) { contents = QString("No source for widget: '%1'").arg(objectName()); } else { QFile f(m_sourceFileName); if (!f.open(QFile::ReadOnly)) contents = QString("Could not open file: '%1'").arg(m_sourceFileName); else contents = f.readAll(); } contents.replace('&', "&"); contents.replace('<', "<"); contents.replace('>', ">"); QStringList keywords; keywords << "for " << "if " << "switch " << " int " << "#include " << "const" << "void " << "uint " << "case " << "double " << "#define " << "static" << "new" << "this"; foreach (QString keyword, keywords) contents.replace(keyword, QLatin1String("<font color=olive>") + keyword + QLatin1String("</font>")); contents.replace("(int ", "(<font color=olive><b>int </b></font>"); QStringList ppKeywords; ppKeywords << "#ifdef" << "#ifndef" << "#if" << "#endif" << "#else"; foreach (QString keyword, ppKeywords) contents.replace(keyword, QLatin1String("<font color=navy>") + keyword + QLatin1String("</font>")); contents.replace(QRegExp("(\\d\\d?)"), QLatin1String("<font color=navy>\\1</font>")); QRegExp commentRe("(//.+)\\n"); commentRe.setMinimal(true); contents.replace(commentRe, QLatin1String("<font color=red>\\1</font>\n")); QRegExp stringLiteralRe("(\".+\")"); stringLiteralRe.setMinimal(true); contents.replace(stringLiteralRe, QLatin1String("<font color=green>\\1</font>")); QString html = contents; html.prepend("<html><pre>"); html.append("</pre></html>"); QTextBrowser *sourceViewer = new QTextBrowser(0); sourceViewer->setWindowTitle("Source: " + m_sourceFileName.mid(5)); sourceViewer->setParent(this, Qt::Dialog); sourceViewer->setAttribute(Qt::WA_DeleteOnClose); sourceViewer->setLineWrapMode(QTextEdit::NoWrap); sourceViewer->setHtml(html); sourceViewer->resize(600, 600); sourceViewer->show(); }
int main(int argc, char **argv) { QApplication app(argc, argv); //! [0] QTextBrowser browser; QColor linkColor(Qt::red); QString sheet = QString::fromLatin1("a { text-decoration: underline; color: %1 }").arg(linkColor.name()); browser.document()->setDefaultStyleSheet(sheet); //! [0] browser.setSource(QUrl("../../../html/index.html")); browser.resize(800, 600); browser.show(); return app.exec(); }
/*! Shows the application log. \todo Write some sort of log viewer. */ void MvdMainWindow::showLog() { QFileInfo fi(paths().logFile()); QFile file(fi.absoluteFilePath()); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::warning(this, MVD_CAPTION, tr("Failed to open the log file.")); return; } QTextBrowser *viewer = new QTextBrowser; viewer->setWindowFlags(Qt::Tool); viewer->setWindowModality(Qt::NonModal); viewer->resize(640, 480); new MvdLogSyntaxHighlighter(viewer->document()); QTextStream stream(&file); QString text = stream.readAll(); viewer->setPlainText(text); viewer->show(); }