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:
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.