代码说明:
在槽函数中首先判断标志变量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");
...
}
|