Qt - okno dialogowe wyboru koloru i zmiana koloru czcionki w kontrolce QTextEdit
Stronę tą wyświetlono już: 2680 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:
- void MainWindow::setButtonColor(QPushButton* button, QColor color){
- // ustawiam styl koloru tła przycisku
- button->setStyleSheet(QString("background: #%1%2%3").arg(color.red(), 2, 16, QChar('0')).arg(color.green(), 2, 16, QChar('0')).arg(color.blue(), 2, 16, QChar('0')));
- }
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:
- void MainWindow::setTextStyleButtonsState(){
- QTextCursor cursor = ui->edit->textCursor();
- if(!cursor.hasSelection()){
- 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();
- if(fontFamily != fontFamilies->currentText()){
- fontFamilies->setCurrentIndex(fontFamilies->findText(fontFamily));
- }
- setButtonColor(fontColor, ui->edit->textColor()); // dodana linijka kodu
- }
- }
Wynik działania powyższego kodu można zobaczyć na poniższym rysunku.


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