Qt - wykorzystanie kontrolki QComboBox do wyboru zmiany kroju czcionki użytej w kontrolce QTextEdit
Stronę tą wyświetlono już: 1789 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.


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