Qt 串口自定义波特率
之前和大家分享过跨平台多线程串口调试助手,不过里面没有实现自定义波特率的功能。某天我突然想把这个功能加上,但是网上搜索之后有得到有效的信息,于是就查看
Qt 的帮助文档,查看了波特率的相关枚举值,又查看了
setBaudRate
,最后还是得查
Qt 帮助文档,在里面发现了重要依据
:
To set the baud rate, use the enumeration
QSerialPort::BaudRate
or any positive qint32 value.
即
setBaudRate
时,直接传入自定义波特率的值!
这为实现自定义波特率提供了强有力的依据;然后试了下果然可以!
Ok,既然自定义波特率实现了,那么接下来就是在 UI
中添加这个可以输入自定义波特率的组件了。但是怎么让 QComboBox
在已有的 item
上再添加一个 lineEdit
呢?我陷入了深深的沉思……
这一沉思一周就过去了。结合自己的经验(Qt TableWidget控件及自定义委托 )
,我首先想到的是自定义委托,但是动手测试了下,结果不行,自定义委托中添加的也都是一类相同的控件,于是放弃了该方法。但是别人的功能是怎么实现的呢?于是边查看 QComboBox
头文件中的函数边在网上搜寻线索,有一个使能 QComboBox item
可编辑的接口,但是使能之后每个 item
都可以编辑了,这也不是我想要的结果啊!我还想过,当选择【 Custom
】时,移除 QComboBox
对象,添加一个新的可编辑的 QComboBox
对象,后来觉得这个比较反人类,于是没再继续。
而且查看了别人串口调试助手运行时的库,发现也是用到了Qt,这我就不能忍了。于是看 QComboBox
的头文件,发现一个 setLineEdit
,诶!!!这个接口有点意思,值得一试,经过多种组合,终于在 Windows
下实现了我想要的效果——点击预先设置的波特率,可通过 item
选择;当选择【 Custom
】 item
时, item
变成 lineEdit
,完美!
主要函数如下:
connect(ui->cbx_baudrate, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_baudrateIndexChange(int)));
//当选择【Custom】item时 void SerialPortMainWindow::slot_baudrateIndexChange(int baudrateIndex) { if(4 == baudrateIndex) { QLineEdit *lineEdit = new QLineEdit(this); //输入时可使用正则表达式做一定限制 ui->cbx_baudrate->setLineEdit(lineEdit); } else { ui->cbx_baudrate->setEditable(false); } }
connect(ui->cbx_baudrate, SIGNAL(currentTextChanged(QString)), this, SLOT(slot_baudrateChange(QString)));
//获得自定义波特率的值 void SerialPortMainWindow::slot_baudrateChange(QString baudrateText) { m_baudrate = baudrateText;
qDebug() << m_baudrate; }
最后效果如下:
小结:
主要就是当你想实现一个功能时,结合自己以前的经验,是否有解决方法?
如果没有的话,主要还是查看官方文档!
当一种方法不行时,及时更换另一种方法。
如需完整工程,可在公众号后台留言。
欢迎大家关注公众号: