Każdy system posiada pewne standardowe okna dialogowe, które udostępniają aplikacjom podstawowe funkcjonalności. Do takich okien należy okno dialogowe wyboru koloru, które wykorzystam do dodania możliwości ustawienia kolorów tekstu wpisywanego w kontrolce QTextEdit. Będzie to oczywiście kontynuacja projektu rozpoczętego na stronie Programowanie → Qt Creator GUI → Qt - kontrolka QTextEdit i kontynuowanego na kolejnych podstronach tego działu.
Do stworzenia okna dialogowego wyboru kolorów konieczne jest użycie klasy QColorDialog a więc i standardowo załączenie pliku QColorDialog. Utworzony zostanie również w sposób dynamiczny obiekt klasy QPushButton, pod który podpięte zostanie wywołanie okna dialogowego wyboru kolorów. W związku z tym należy załączyć również plik QPushButton, a w klasie MainWindow dodać pole:
QPushButton *fontColor;
W konstruktorze klasy MainWindow trzeba utworzyć i odpowiednio ustawić właściwości przycisku:
fontColor = new QPushButton; // tworzę obiekt klasy QPushButton
ui->mainToolBar->addWidget(fontColor); // dodaję przycisk do paska narzędziowego
QColor textColor = ui->edit->textColor(); // pobieram kolor tekstu
// formatowanie koloru przycisku
setButtonColor(fontColor, ui->edit->textColor()); // metoda utworzona do zmiany koloru przycisku
QObject::connect(fontColor, SIGNAL(clicked(bool)), this, SLOT(onFontColorClicked())); // podpinam się pod sygnał clicked kontrolki QPushButton
Metoda setButtonColor zaimplementowana w klasie MainWindow wygląda następująco:
Konieczne jest również utworzenie slotu w klasie MainWindow wywoływanego w wyniku kliknięcia przycisku:
void MainWindow::onFontColorClicked(){
QColorDialog cd(this); // tworzę obiekt klasy odpowiedzialnej za wyświetlenie i obsługę okna wyboru koloru
cd.setCurrentColor(fontColor->palette().color(QPalette::Button)); // ustawiam kolor domyślny na obecny kolor czcionki
if(cd.exec()){ // wywołuję okno dialogowe i jeżeli użytkownik zatwierdził wybór koloru to
QColor textColor = cd.selectedColor(); // pobieram kolor wybrany przez użytkownika
ui->edit->setTextColor(textColor); // ustawiam kolor czcionki w kontrolce QTextEdit
setButtonColor(fontColor, textColor); // ustawiam kolor przycisku
}
}
W metodzie setTextStyleButtonsState należy wprowadzić modyfikację, polegającą na uaktualnianiu koloru przycisku zmiany koloru czcionki względem bieżącej pozycji kursora: