QT实现串口调试助手(七):字体设置面板创建及窗体间传值

上一篇:
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个文字的属性:字体和大小,当然也可以设置更多,方法都是差不多的,再添加几个组件配置一下即可

猜你喜欢

转载自blog.csdn.net/zhangfls/article/details/115265733