Qt - wykorzystanie kontrolki QComboBox do wyboru zmiany kroju czcionki użytej w kontrolce QTextEdit

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

Kontrolka QComboBox jest rozwijaną listą wyboru, którą można wykorzystać np. do umożliwienia wyboru kroju dostępnej czcionki w opisywanym wcześniej na stronie Programowanie → Qt Creator GUI → Qt - kontrolka QTextEdit i Programowanie → Qt Creator GUI → Qt - kontrolka QSpinBox i zmiana rozmiaru czcionki w kontrolce QTextEdit projekcie edytora tekstu. Oczywistym wydaje się fakt, że do utworzenia tejże kontrolki konieczne jest stworzenie obiektu klasy QComboBox oraz załączenie pliku nagłówkowego QComboBox w pliku mainewindow.h, gdzie należy również dodać nowe pole klasy MainWindow:

Listing 1
  1. QComboBox *fontFamilies;

Do pozyskania listy dostępnych w systemie krojów czcionek konieczne będzie również załączenie pliku nagłówkowego QFontDatabase, gdyż dzięki obiektowi klasy QFontDatabase będzie możliwe pozyskanie listy dostępnych krojów czcionek. Cały proces tworzenia i wprowadzania ustawień obiektu klasy QComboBox w konstruktorze klasy MainWindow będzie więc wyglądał następująco:

Listing 2
  1. fontFamilies = new QComboBox; // tworzę obiekt klasy QComboBox
  2. QFontDatabase fonts; // tworzę obiekt klasy QFontDatabase
  3. fontFamilies->addItems(fonts.families()); // pobieram listę krojów czcionek i dodaję je do kontrolki QComboBox
  4. ui->mainToolBar->addWidget(fontFamilies); // dodaję kontrolkę do paska narzędziowego
  5. fontFamilies->setCurrentIndex(fontFamilies->findText(ui->edit->fontInfo().family())); // ustawiam domyślną czcionkę w kontrolce QComboBox
  6. QObject::connect(fontFamilies, SIGNAL(currentTextChanged(QString)), this, SLOT(onFontFamilyChanged(QString))); // podpinam się pod sygnał currentTextChanged

Jak wynika z powyższego kodu, konieczne jest utworzenie slotu:

Listing 3
  1. void MainWindow::onFontFamilyChanged(QString fontFamily){
  2. ui->edit->setFontFamily(fontFamily);
  3. }

Warto też poprawić metodę setTextStyleButtonsState klasy MainWindow:

Listing 4
  1. void MainWindow::setTextStyleButtonsState(){
  2. QTextCursor cursor = ui->edit->textCursor(); // pobieranie klasy QTextCursor odpowiedzialnej za zaznaczanie tekstu
  3. if(!cursor.hasSelection()){ // jeżeli tekst nie jest zaznaczony to należy uaktualnić ustawienia formatowania kontrolek
  4. ui->actionUnderline->setChecked(
  5. ui->edit->fontUnderline()
  6. );
  7. ui->actionBold->setChecked(
  8. ui->edit->fontWeight() == QFont::Bold ? true : false
  9. );
  10. ui->actionItalic->setChecked(
  11. ui->edit->fontItalic()
  12. );
  13. int size = ui->edit->fontPointSize();
  14. fontSize->setValue(size ? size : ui->edit->fontInfo().pointSize());
  15. QString fontFamily = ui->edit->fontFamily().length() ? ui->edit->fontFamily() : ui->edit->fontInfo().family(); // pobieram krój czcionki
  16. if(fontFamily != fontFamilies->currentText()){ // jeżeli krój czcionki jest różny od obecnie ustawionego to
  17. fontFamilies->setCurrentIndex(fontFamilies->findText(fontFamily)); // znajdź indeks i ustaw go jako aktualnie wybrany
  18. }
  19. }
  20. }

Wynikiem wprowadzonych zmian w kodzie będzie okno programu z poniższej ilustracji.

Przykład zastosowania kontrolki QComboBox do wyświetlania listy wyboru kroju czcionki
Rys. 1
Przykład zastosowania kontrolki QComboBox do wyświetlania listy wyboru kroju czcionki
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qcombobox.html - opis klasy QComboBox na stronie dokumentacji Qt
  2. doc.qt.io/qt-4.8/qtextedit.html - opis klasy QTextEdit na stronie dokumentacji Qt

Komentarze