Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2542 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
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.