上一篇:
QT实现串口调试助手(六):页面布局
一般串口调试工具都有修改串口接收框字体的功能面板,我们也来加一个:
1、先创建一个字体设置面板
比如我们创建一个widget,命名为letterFormWindow类,QTcreator会自动生成.cpp、.h 和.ui文件
2、在UI界面添加一些组件,如图:
3、现在先回到主界面的文件编写,在主界面命令栏里添加一个快捷按钮
QMenuBar *menuBar = ui->menuBar;
QAction *letterPanlAct = menuBar->addAction("字体设置");
4、将这个快捷按钮绑定到刚才的letterFormWindow窗口的创建上,这样点击快捷键,就可以呼出字体设置面板了
connect(letterPanlAct,&QAction::triggered,
[=] ()
{
if(letterFormUi == NULL)
{
letterFormUi = new letterFormWindow;
connect(letterFormUi, SIGNAL(sendFont(QFont)), this, SLOT(receiveFont(QFont)));
}
letterFormUi->show();
}
);
5、注意这句connect(letterFormUi, SIGNAL(sendFont(QFont)), this, SLOT(receiveFont(QFont))),将子界面的sendFont函数事件绑定到主界面的receiveFont函数上,用来将子界面设置完的字体传到主界面进行更改。
6、子界面实现:头文件
class letterFormWindow : public QWidget
{
Q_OBJECT
public:
explicit letterFormWindow(QWidget *parent = 0);
~letterFormWindow();
private slots:
void on_buttonBox_accepted();
void on_fontComboBox_currentFontChanged(const QFont &f);
void on_spinBox_valueChanged(int arg1);
void ChangeFont(void);
signals:
void sendFont(QFont); //用来传递数据的信号
private:
Ui::letterFormWindow *letterUi;
QFont tempFont; //缓存字体
};
CPP文件:
#include "letterformwindow.h"
#include "ui_letterformwindow.h"
letterFormWindow::letterFormWindow(QWidget *parent) :
QWidget(parent),
letterUi(new Ui::letterFormWindow)
{
letterUi->setupUi(this);
letterUi->spinBox->setValue(10);
}
letterFormWindow::~letterFormWindow()
{
delete letterUi;
}
void letterFormWindow::on_buttonBox_accepted()
{
emit sendFont(tempFont); //向主界面传递该字体
this->hide();
}
void letterFormWindow::on_fontComboBox_currentFontChanged(const QFont &f)
{
tempFont.setFamily(f.family());
ChangeFont();
}
void letterFormWindow::on_spinBox_valueChanged(int arg1)
{
tempFont.setPointSize(arg1);
ChangeFont();
}
void letterFormWindow:: ChangeFont(void)
{
letterUi->label->setFont(tempFont);
}
7、创建主界面接收函数,接收字体设置面板传来的字体QFont ,更新串口接收框内的文字的字体
//接收字体窗口
void MainWindow::receiveFont(QFont font)
{
ui->uartReadPlain->setFont(font);
}
8、在主界面的头文件里声明一下字体窗口界面(主要是为了能打开上次开启的窗口,而不是每次都开启新的)
private:
Ui::MainWindow *ui;
letterFormWindow *letterFormUi = NULL; //字体窗口
9,这样就可以设置字体了,如下图:
这里只设置了2个文字的属性:字体和大小,当然也可以设置更多,方法都是差不多的,再添加几个组件配置一下即可