Изменть стиль, размер и тип шрифта в Qt

120
08 декабря 2019, 20:00

У меня есть три чекбокса, QFontComboBox и QSpinBox, а также главное текстовое поле QTextEdit.

Нужно сделать так, чтобы SpinBox изменял размер шрифта, чекбоксы делали текст курсивным, подчеркнутым и полужирным соответственно.

Чекбоксы пробую сделать так:

// чекбоксы
if (ItalyStyle->isChecked()) {
   MainTextEdit->setFontItalic(true);
}
if (BoldStyle->isChecked()) {
   MainTextEdit->setFontWeight(true);
}
if (UnderLineStyle->isChecked()) {
   MainTextEdit->setFontUnderline(true);
}

Не работает. Если не сложно, помогите.

И еще вопрос - Как установить формат шрифта из QFontComboBox?

Answer 1

У класса QCheckBox имеется такой сигнал stateChanged(int state).

Если вы хотите один обработчикдля всех чекбоксов, делайте так:

class MainClass : ... {
    Q_OBJECT
//...
private slots:
    void checkBoxChanged(int state);
//..
}

Реализация:

MainClass::MainClass(QWidget* parent) : QMainWindow(parent) {
    // ...      
    QTextEdit* MainTextEdit = new QTextEdit(this); 
    // ! Обязательно надо задать имя, иначе мы его не найдем
    MainTextEdit->setObjectName("MainTextEdit");
    connect(ItalyStyle, SIGNAL(stateChanged(int)), this, SLOT(checkBoxChanged(int)));
    connect(BoldStyle, SIGNAL(stateChanged(int)), this, SLOT(checkBoxChanged(int)));
    connect(UnderLineStyle, SIGNAL(stateChanged(int)), this, SLOT(checkBoxChanged(int)));
    // ...
}
void MainClass::checkBoxChanged(int state)
{
    // Ищем нужный виджет по его имени
    QTextEdit* MainTextEdit = findChild<QTextEdit*>("MainTextEdit");
    if( MainTextEdit != nullptr )
    {
        // Выбираем нужный чекбокс по имени переменной
        if( sender()->objectName() == "ItalyStyle" )
            MainTextEdit->setFontItalic(state == Qt::Checked);
        else if( sender()->objectName() == "BoldStyle" )
            MainTextEdit->setFontWeight(state == Qt::Checked);
        else if( sender()->objectName() == "UnderLineStyle" )
            MainTextEdit->setFontUnderline(state == Qt::Checked);    
    }
}
READ ALSO
C++ &mdash; линковка статических библиотек на linux в CMake

C++ — линковка статических библиотек на linux в CMake

На Windows в Visual Studio было достаточно раскидать файлы по специальным папкам и прописать:

158
Обращение к объекту из ArrayList по его полям

Обращение к объекту из ArrayList по его полям

Уважаемые сэнсэи, гуру и мастера Йоды Java, нужна подмогаСитуация тривиальная, но тревожащая мой покой

151
Работа с элементом ComboBox JavaFX

Работа с элементом ComboBox JavaFX

У меня есть небольшая программа, в которой есть ComboBox элементДанный элемент принимет 5 значений для примера

146
Класс File и каталоги

Класс File и каталоги

Сейчас изучаю ввод-вывод, столкнулся с таким понятие как каталог, не очень понимаю что это, можете объяснить?

104