Qt - kontrolka QTextEdit
Stronę tą wyświetlono już: 2709 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.

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:
- actionOpen - pozycja w menu Plik→Otwórz;
- actionSave - pozycja w menu Plik→Zapisz;
- actionBold - pozycja w menu Formatowanie→Pogróbienie;
- actionItalic - pozycja w menu Formatowanie→Kursywa;
- actionUnderline - pozycja w menu Formatowanie→Podkreślenie
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()
- );
- }


Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski

Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz

Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha

Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams

Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis

Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół

Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz

Tytuł:
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV
Autor:
Adrian Kaehler, Gary Bradski

Tytuł:
C++ w 24 godziny. Wydanie VI
Autor:
Rogers Cadenhead, Jesse Liberty

Tytuł:
C++ Optymalizacja kodu. Sprawdzone techniki zwiększania wydajności
Autor:
Guntheroth Kurt