Qt - kontrolka QTextEdit

Autor podstrony: Krzysztof Zajączkowski

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

Kontrolka QTextEdit jest obiektem klasy QTextEdit i umożliwia ona wyświetlanie tekstu wieloliniowego i to z zaawansowanym systemem jego formatowania wykorzystującym format HTML. W celu zademonstrowania niektórych możliwości tej kontrolki stworzyłem prosty projekt interfejsu graficznego użytkownika pokazany na poniższym rysunku.

Przykładowy interfejs użytkownika wykorzystujący kontrolkę QTextEdit
Rys. 1
Przykładowy interfejs użytkownika wykorzystujący kontrolkę QTextEdit

Nazwa obiektu klasy QTextEdit to w moim przypadku edit. Dodatkowo dodałem kilka obiektów klasy QAction, czyli akcje związane z pozycjami w menu oraz przyciskami na pasku narzędziowym:

W pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QFile> #include <QTextStream> #include <QDebug> #include <QFileDialog> #include <QMessageBox> #include <QFont> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT void setTextStyleButtonsState(); public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_actionOpen_triggered(); void on_actionZapisz_triggered(); void on_actionBold_triggered(); void on_actionItalic_triggered(); void on_actionUnderline_triggered(); void on_edit_cursorPositionChanged(); // zdarzenie związane z zmianą położenia karetki klawiatury w kontrolce QTextEdit private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

W pliku mainwindow.cpp kod będzie wyglądał następująco:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // ustawiam akcje związane z formatowaniem jako zaznaczalne ui->actionBold->setCheckable(true); ui->actionItalic->setCheckable(true); ui->actionUnderline->setCheckable(true); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_actionOpen_triggered() // otwieranie pliku tekstowego z formatowaniem ustawionym sztywno na UTF-8 { QString filePath = QFileDialog::getOpenFileName( this, // wskaźnik na rodzica (może być 0, gdy rodzica nie ma) "Open text file", // Text belki tytułowej okna dialogowego QDir::homePath(), // ścieżka startowa "All txt files (*.txt *.ftf);;Txt files (*.txt);;Formatted tekxt file (*.ftf)" // filtr plików ); QFile readFile(filePath); QFileInfo fileInfo(filePath); QString extension = fileInfo.suffix(); // pobieram rozszerzenie wybranego pliku if(readFile.exists()){ if(readFile.open(QIODevice::ReadOnly | QIODevice::Text)){ QTextStream read(&readFile); read.setCodec("UTF-8"); if(extension == "txt"){ // jeżeli rozszerzeniem jest zwykły plik tekstowy txt to ui->edit->setText(read.readAll()); // używam funkcji setText kontrolki klasy QTextEdit }else if(extension == "ftf"){ // a jak rozszerzenie to wymyślone przeze mnie ftf (formatted text file) to ui->edit->setHtml(read.readAll()); // używam funkcji setHtml żeby wczytać tekst z formatowaniem HTML } readFile.close(); } } QTextCursor cursor = ui->edit->textCursor(); cursor.movePosition(QTextCursor::End); ui->edit->setTextCursor(cursor); } void MainWindow::on_actionZapisz_triggered() { qDebug() << ui->edit->toHtml(); QString filePath = QFileDialog::getSaveFileName( this, // wskaźnik na okno rodzica (może być 0, gdy rodzica nie ma) "Save text file", // text belki tytułowej okna dialogowego QDir::homePath(), // ścieżka startowa "All txt files (*.txt *.ftf);;Txt files (*.txt);;Formatted tekxt file (*.ftf)" // filtr ); QFile writeFile(filePath); if(writeFile.open(QIODevice::WriteOnly | QIODevice::Text)){ QTextStream write(&writeFile); write.setCodec("UTF-8"); QFileInfo fileInfo(filePath); QString extension = fileInfo.suffix(); // rozszerzenie pliku if(extension == "txt"){ // jeżeli rozszerzenie to txt to write << ui->edit->toPlainText(); // zapisuję do pliku zwykły tekst }else if(extension == "ftf"){ // a jak rozszerzenie to wymyślone przeze mnie ftf (formatted text file) to write << ui->edit->toHtml(); // to używam funkcji toHtml żeby zapisać w pliku sformatowany tekst z wykorzystaniem HTML-a } writeFile.close(); } } void MainWindow::on_actionBold_triggered() // wciśnięty został przycisk pogrubienia { ui->edit->setFontWeight(ui->edit->fontWeight() == QFont::Bold ? QFont::Normal : QFont::Bold); } void MainWindow::on_actionItalic_triggered() // wciśnięty został przycisk kursywy { ui->edit->setFontItalic(!ui->edit->fontItalic()); } void MainWindow::on_actionUnderline_triggered() // wciśnięty został przycisk podkreślenia { ui->edit->setFontUnderline(!ui->edit->fontUnderline()); } void MainWindow::on_edit_cursorPositionChanged() // zmieniła się pozycja karetki klawiatury { setTextStyleButtonsState(); // ustawianie poprawnego stanu przycisków formatujących tekst } void MainWindow::setTextStyleButtonsState(){ ui->actionUnderline->setChecked( ui->edit->fontUnderline() ); ui->actionBold->setChecked( ui->edit->fontWeight() == QFont::Bold ? true : false ); ui->actionItalic->setChecked( ui->edit->fontItalic() ); }
Przykład działania podstawowego formatowania tekstu w kontrolce QTextEdit
Rys. 2
Przykład działania podstawowego formatowania tekstu w kontrolce klasy QTextEdit
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-4.8/qtextedit.html - opis klasy QTextEdit na stronie dokumentacji Qt
Propozycje książek