实现需求
我在项目中实现截取串口端口的功能,端口内容是
COM12 #Silicon Labs CP210x USB to UART Bridge
这种格式的,通过#隔开,中间还有空白字符.
需要拿到COM12的端口号.
函数说明
QT中,能实现上面的的方法有很多,其中最简单的的就是通过QString的section方法来实现.
section函数
QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const
start, end含义
start、end并非原字符串的索引,而是切分字符串后得到的字符串数组的索引。
例如:
“forename,middlename,surname,phone"按’,‘进行切分后,得到4个元素的字符串数组
list = {"forname", "middlename", "surname", "phone"}
索引分别为0,1,2,3
- 当start = 0, end = 0时,返回
forname
- 当start = 0, end = 1时,返回
forname,middlename
- 当start = 0, end = 2时,返回
forname,middlename,surname
- 当start = 0, end = 3时,返回
forname,middlename,surname,phone
- 当start = 1, end = 0时,返回
middlename
- 当start = 1, end = 1时,返回
middlename,surname
- 当start = 2, end = 2时,返回
surname
- 当start = 2, end = 3时,返回
surname,phone
这个函数把字符串看成是几个块,这些块由 sep 分隔,start 和 end 指定块号,end 默认为 –1 ,返回的是[ start, end ]内的块组成的字符串,如果 start 和 end 都是负数,那么将从字符串的后面往前面数,返回 [ -end, –start ]内的块组成的字符串。
SectionFlags含义
是一些标记,如SectionSkipEmpty表示如果两个分隔符之间是空串,那么就会跳过。 具体由如下:
enum SectionFlag {
SectionDefault = 0x00,
SectionSkipEmpty = 0x01,
SectionIncludeLeadingSep = 0x02,
SectionIncludeTrailingSep = 0x04,
SectionCaseInsensitiveSeps = 0x08
};
与split函数的区别
QString::section
可用来分隔字符串,与QString::split
区别是:前者可只取指定范围的字符串内容,后者返回的是切分后的结果列表,包含所有切分结果字符串。
实例代码
//串口端口不为空
QString portName=strPortName.section('#',0,0).trimmed();//获取#号前面的端口号
qDebug() << portName;
输入:
COM12 #Silicon Labs CP210x USB to UART Bridge
输出:
COM12