Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2199 razy

Klasa QTextDocument umożliwia zaawansowanie formatowanie tekstu z wykorzystaniem znaczników HTML co sprawia, że cała wiedza nabyta podczas nauki HTML-a i CSS-a może być wykorzystana do formatowania rysowanego tekstu. Niestety nie wszystko jest tak dobrze obsłużone jak w przeglądarkach internetowych co objawia się brakiem reakcji na niektóre style formatowania HTML. Oto prosty przykład wykorzystania klasy QTextDocument:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // tworzę style globalne QString style = "p{ font-size: 12px; text-align: justify; }" ".equation { text-align: center; font-size: 16px; background-color: white; }" ".equation > span { font-size: 16px; }" ".equation > sup {font-size: 16px; }"; // dodaję style globalne textDocument.setDefaultStyleSheet(style); // wstawiam sformatowany tekst HTML textDocument.setHtml("<p>And Einsain say:</p>" "<p class='equation'>" "<span style='color: red'>E</span>" "=m·" "<span style='color: orange'>c</span>" "<sup>2</sup>" "</p>" "<p>And after that Sun sometime rises on Earth twice</p>"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::paintEvent(QPaintEvent *event){ QWidget::paintEvent(event); QPainter painter; painter.begin(this); // ustawiam rozmiar strony dokumentu dostosowując go do wymiarów okna textDocument.setPageSize(this->size()); // rysuję zawartość dokumentu textDocument.drawContents(&painter); painter.end(); }

Wynik działania powyższego kodu można zobaczyć na poniższym rysunku.

Qt Creator - przykład wykorzystania klasy QTextDocument do formatowania tekstu
Rys. 1
Qt Creator - przykład wykorzystania klasy QTextDocument do formatowania tekstu

Jak widać obsługiwane są również i encje używane w HTML-u co można wykorzystać do wstawiania znanych znaków specjalnych.

Można w obiekcie klasy QTextDocument osadzić grafikę, wystarczy nieco zmodyfikować wcześniejszy kod:

// tworzę style globalne QString style = "p{ font-size: 12px; text-align: justify; }" ".equation { text-align: center; font-size: 16px; background-color: white; }" ".equation > span { font-size: 16px; }" ".equation > sup {font-size: 16px; }" "img { max-width: 100%; }" "p.image { text-align: center; }"; // dodaję style globalne textDocument.setDefaultStyleSheet(style); QString imageUrl = "img://fog.jpg"; // ścieżka do pliku image.load(":/images/fog.jpg"); // wczytuję plik z zasobów image = image.scaledToWidth(200); // skaluję plik // dodaję plik do zasobów textDocument textDocument.addResource(QTextDocument::ImageResource, QUrl(imageUrl), image); // wstawiam sformatowany tekst HTML textDocument.setHtml("<p>And Einsain say:</p>" "<p class='equation'>" "<span style='color: red'>E</span>" "=m·" "<span style='color: orange'>c</span>" "<sup>2</sup>" "</p>" "<p>And after that Sun sometime rises on Earth twice</p>" "<p class='image'><img src='img://fog.jpg' style='width: 250px'/></p>" );

Wynik działania powyższego kodu objawia się w sposób pokazany poniżej.

Qt Creator - wynik osadzenia grafiki w obiekcie klasy QTextDocument
Rys. 2
Wynik osadzenia grafiki w obiekcie klasy QTextDocument
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qtextdocument.html - opis klasy QTextDocument dostępny na stronie Qt
  2. doc.qt.io/qt-4.8/qpainter.html - opis klasy QPainter dostępny na stronie Qt
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.