代码说明:
在槽函数中首先判断标志变量mIsOpen的状态(true/false),如果为true,则点击按钮2后,槽函数执行关闭串口的动作;如果为false,则槽函数执行打开串口的动作。
关闭串口只需要执行QSerialPort类的.close()函数,然后对相关按钮标签文字做更改,以及使能按钮1即可。
打开串口需要分三步执行代码:第一步读取配置文件(readConfigFile()),第二步配置串口并打开串口(startSerialPort()),第三步根据startSerialPort()函数的返回值判断串口是否打开成功。若打开成功,则更改按钮标签文字,禁用按钮1;反之若打开失败,则弹出警告窗口(这里使用QT自带的QMessageBox类即可)。
对于readConfigFile()函数,我这里使用QSettings类来读取ini文件,关于ini文件的介绍可以见这里:CSDN:ini配置文件格式。QSettings读取ini文件时只需要先创建一个QSettings类实例iniConfigFile,然后调用iniConfigFile.value()函数对想要的数据读取即可,读取到的数据存储到类的成员变量(如mPortName)中以供后面的函数使用。具体可查看QT官方的帮助文档。
对于startSerialPort()函数,根据成员变量(如mPortName)的值配置串口并打开,配置时使用对应的.set***()函数即可。打开串口时调用.open()函数即可。注:这里配置串口时除了.setPortName()函数以外,其他的配置函数都不能将QString类型数据直接当做参数传入函数中,故我的源代码中使用了switch-case语句,详情请参考源代码。
关于配置文件config.ini,我将其放在了当前程序所在的文件夹下,每次打开程序时都会检测是否存在这个配置文件,如果不存在则会生成一个config.ini文件,并写入默认的配置。主程序的检测文件以及生成文件的代码如下:
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- mIsOpen = false; //第一次打开时将标志变量mIsOpen置为false
- //第一次打开程序时会创建配置文件
- //mFileName
- mFileName = QCoreApplication::applicationDirPath() + "/config.ini";
- QFile file(mFileName);
- if(!file.exists()) //判断是否有配置文件,如果没有则在这里执行新建配置文件的动作
- {
- file.open(QIODevice::WriteOnly);
- file.close(); //file.open()打开一个不存在的文件时会新建这个文件
- makeConfigFile();//在这个函数中对ini文件写入数据
- }
- }
- //=================对ini文件写入数据
- void MainWindow::makeConfigFile()
- {
- QSettings iniConfigFile(mFileName,QSettings::IniFormat);
- iniConfigFile.setValue("serialport/portname","COM1");
- ...
- }
|