Нужно получить шрифт из QFontComboBox

225
21 декабря 2019, 10:00

Делаю текстовый редактор. Нужно чтобы при изменении значения в QFontComboBox* FStyleList в текстовоее поле QTextEdit* MainTextEdit устанавливался нужный шрифт. Есть фрагмент кода.

в главном классе:

Fontstr = new QString (this);
MainTextEdit = new QTextEdit(this);
MainTextEdit->setMinimumSize(300, 300);
FStyleList = new QFontComboBox(this);
connect (FStyleList, SIGNAL(valueChanged()), this, SLOT(fontChanged(QString)));

описание функции:

void MainClass::fontChanged(Fontstr){
    QTextCursor cursor = MainTextEdit->textCursor();
    MainTextEdit->selectAll();
    Fontstr = FStyleList->currentFont().toString();
    MainTextEdit->setFontFamily(font.fromString(&fontstr));
    cursor.clearSelection();
    MainTextEdit->setFont(font);
}

В заголовчном файле:

class MainClass : public QMainWindow
{
    Q_OBJECT
public:
    QFontComboBox *FStyleList;
    QFont *font;
    QString *Fontstr;
    QTextEdit *MainTextEdit;
private slots:
    void fontChanged(QString Fontstr);

ошибки:

при определении Fontstr в главном классе

conversion from 'MainClass* const' to 'QChar' is ambiguous

В описании функции

variable or field 'fontChanged' declared void

и

"Fontstr" was not declared in this scope

Помогите исправить эти ошибки и корректно получить значение из QFontComboBox и установить его в QTextEdit

Скриншот

Описание слота

void MainClass::setTextEditFont(const QFont& f){
QFont newFont = f;

newFont.setPixelSize(FontsizeSpin->value());
MainTextEdit->setFont(newFont);

Подключение слота

  connect(FStyleList, SIGNAL (currentFontChanged(const QFont&)), this, 
  SLOT(MainClass::setTextEditFont(const QFont&)));
Answer 1

Эти два виджета прекрасно подходят друг к другу с точки зрения установки шрифта:

connect(FStyleList, SIGNAL(currentFontChanged(const QFont&)), MainTextEdit, SLOT(setCurrentFont(const QFont&)));

Слот QTextEdit::setCurrentFont изменят шрифт у выделенного текста, если же необходимо изменить шрифт у всего документа, то надо использовать метод QWidget::setFont:

// коннект через лямбду
connect(FStyleList, &QFontComboBox::currentFontChanged, [&](const QFont& f)
{
    MainTextEdit->setFont(f);
});

Дополнение. Если необходимо устновить шрифт в QTextEdit с учетом других параметров (например, размер шрифта). Где-то в классе приложения создаем слот, например setTextEditFont(const QFont&), соответственно:

//В конструкторе
connect(FStyleList, &QFontComboBox::currentFontChanged, this, &MainClass::setTextEditFont);
//В слоте
void MainClass::setTextEditFont(const QFont& f)
{
    QFont newFont = f;
    // Учитываем размер шрифта
    newFont.setPixelSize(/*виджет с размером шрифта*/);
    // Устанавливаем новый шрифт в QTextEdit (для выделенного текста)
    MainTextEdit->setCurrentFont(newFont);
    // Или глобально, для всего текста в MainTextEdit
    // MainTextEdit->setFont(newFont);
}
READ ALSO
Как сделать иконку из картинки, лежащей в одной папке с проектом?

Как сделать иконку из картинки, лежащей в одной папке с проектом?

Пытаюсь назначить иконку приложенияПодключил ее в ресурсном файле

185
Все ли файлы нужно загружать на GitHub?

Все ли файлы нужно загружать на GitHub?

Допустим хочу выгрузить android-проект на githubТак вот возник вопрос, может и глупый, но все же

204
Java test with Mock Controller

Java test with Mock Controller

У меня вопрос связанный с тестированием моего контроллера используя mockВ общем я создал проект используя MVC

226