Qt - okno dialogowe wyboru koloru i zmiana koloru czcionki w kontrolce QTextEdit
Autor podstrony: Krzysztof Zajączkowski
Stronę tą wyświetlono już: 3584 razy
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: