QComboBox设置字体样式

一、我们希望将系统的字体添加到下拉列表中,并且在工具栏中显示,效果如下图所示:

QComboBox设置字体样式

二、单纯的用QComboBox是不能获取字体样式的,QComboBox仅仅是一个下拉列表,并不能获取系统字体,Qt专门提供了一个类QFontComboBox来获取下拉式的系统字体;

参考Qt助手查看QFontComboBox类的第一句是The QFontComboBox widget is a combobox that lets the user select a font family.另外需要配合使用的就是QTextCharFormat类,因为它提供了setFontFamily()函数来设置系统字体;

三、将下拉列表添加到工具栏中必须用代码,不能在ui界面拖动添加。类似的还有QSpinBox、QLabel

四、添加头文件

#include <QSpinBox>
#include <QFontComboBox>
#include <QLabel>
#include <QTextCharFormat>

五、定义两个指针,添加槽函数

private:
    Ui::MainWindow *ui;

    QSpinBox *spinBox;
    QFontComboBox *comboBox;

private slots:
    void spinBoxSlot(int FontSize);
    void comboBoxSlot(const QString &arg1);

六、cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->mainToolBar->addWidget(new QLabel("字体大小"));

    spinBox = new QSpinBox;
    spinBox->setValue(ui->textEdit->font().pointSize());
    ui->mainToolBar->addWidget(spinBox);

    ui->mainToolBar->addWidget(new QLabel("字体"));

    comboBox = new QFontComboBox;
    comboBox->setMinimumWidth(150);
    ui->mainToolBar->addWidget(comboBox);

    connect(spinBox,SIGNAL(valueChanged(int)),this,SLOT(spinBoxSlot(int)));
    connect(comboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(comboBoxSlot(const QString &)));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::spinBoxSlot(int FontSize)
{
    QTextCharFormat fmt;
    fmt.setFontPointSize(FontSize);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}

void MainWindow::comboBoxSlot(const QString &arg1)
{
    QTextCharFormat fmt;
    fmt.setFontFamily(arg1);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}