52

Qt 串口自定义波特率

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzUxMTk4MzY3MA%3D%3D&%3Bmid=2247484257&%3Bidx=1&%3Bsn=1b1b9bc536364cc1d5ad010bc31612c4
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击上方蓝字可直接关注公众号哦,方便下次阅读

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 选择;当选择【 Customitem 时, 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;

}

最后效果如下:

AvYFze7.png!web

小结:

主要就是当你想实现一个功能时,结合自己以前的经验,是否有解决方法?

如果没有的话,主要还是查看官方文档!

当一种方法不行时,及时更换另一种方法。

如需完整工程,可在公众号后台留言。

欢迎大家关注公众号:

auiQjuN.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK