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

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2273 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:

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:

fontFamilies = new QComboBox; // tworzę obiekt klasy QComboBox QFontDatabase fonts; // tworzę obiekt klasy QFontDatabase fontFamilies->addItems(fonts.families()); // pobieram listę krojów czcionek i dodaję je do kontrolki QComboBox ui->mainToolBar->addWidget(fontFamilies); // dodaję kontrolkę do paska narzędziowego fontFamilies->setCurrentIndex(fontFamilies->findText(ui->edit->fontInfo().family())); // ustawiam domyślną czcionkę w kontrolce QComboBox 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:

void MainWindow::onFontFamilyChanged(QString fontFamily){ ui->edit->setFontFamily(fontFamily); }

Warto też poprawić metodę setTextStyleButtonsState klasy MainWindow:

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

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
Propozycje książek