Qt 串口自定义波特率

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

Qt 多线程串口调试助手

之前和大家分享过跨平台多线程串口调试助手,不过里面没有实现自定义波特率的功能。某天我突然想把这个功能加上,但是网上搜索之后有得到有效的信息,于是就查看Qt的帮助文档,查看了波特率的相关枚举值,又查看了setBaudRate,最后还是得查Qt帮助文档,在里面发现了重要依据: To set the baud rate, use the enumerationQSerialPort::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;
}

最后效果如下:

小结:

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

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

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

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

欢迎大家关注公众号:

发布了91 篇原创文章 · 获赞 94 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ACK_ACK/article/details/103776040