关于QSerialPort的使用说明(Qt实现串口工具)

Qt提供了对串口设备的简单操作功能接口,包括串口配置、收/发数据。将串口设备插入到电脑USB接口后,可在电脑的设备管理里查看端口,会多了个COM之类的端口。一般的USB串行设备驱动在window里都已经安装好了,不需要再单独安装驱动,若是设备管理器查看到端口出现了叹号,可以从网上查找对应的驱动,并下载安装。

1.在使用QSerialPort类的文件里,需要包含以下头文件

#include <QtSerialPort/QtSerialPort>
#include <QtSerialPort/QSerialPortInfo>

2.在.pro文件里添加

QT += serialport

3.获取/查看电脑里所有的串口设备 

    QList<QSerialPortInfo> list;

    list = QSerialPortInfo::availablePorts();
    for (int i = 0; i < list.size(); i++)
    {
         qDebug() << list.at(i).portName() ;//串口名字
         qDebug() << list.at(i).description();//串口描述
         qDebug() << "#########";
    }

执行后输出:

可看当前我电脑有COM1/COM3/COM4,三个串口设备。 

 4.打开和配置串口设备

    QSerialPort *port;
    port = new QSerialPort("COM4");//通过名字打开,可通过上面的list里查找
    /*根据需求对串口进行进行配置*/
    port->setBaudRate(QSerialPort::Baud115200);//配置波特率位115200
    port->setDataBits(QSerialPort::Data8);//配置数据格式为8bit
    port->setParity(QSerialPort::NoParity);//无校验位
    port->setStopBits(QSerialPort::OneStop);//一个停止位
    port->setFlowControl(QSerialPort::NoFlowControl);//不使用流控制
    /*打开设备*/
    if (!port->open(QIODevice::ReadWrite))
    {
         qDebug() << "serial open failed";
         return ;
    }
    else
    {
         qDebug() << "serial open success";
    }
    /*设置接收缓冲区大小*/
    port->setReadBufferSize(500);
    /*绑定接受槽函数,但收到信息是将调用MainSerialRecvMsgEvent函数*/
    QObject::connect(port, &QSerialPort::readyRead, this, &MainWindow::MainSerialRecvMsgEvent);

 如果打开串口失败,可能是因为该串口已经被其他进程占用,绑定槽函数之后,当串口有数据的时候就会回调该槽函数,值得注意的是,假如要接收连串的10个字节的数据,可能进入多次槽函数,每一次接收部分字节;也有可能进入一次槽函数就已接收完10个字节。

5.接收、发送串口数据

/*数据接收*/
void MainWindow::MainSerialRecvMsgEvent(void)
{
    QByteArray MainSerialRecvData;//保存串口数据的数组

    if(port->bytesAvailable()>0)//判断等到读取的数据大小
    {
         MainSerialRecvData = port->readAll();//读取所有的接收数据
         if(!MainSerialRecvData.isEmpty()){
               qDebug() <<MainSerialRecvData.size();//打印数据大小
               for(int i = 0; i < MainSerialRecvData.size();i++)
               {
                    qDebug() <<MainSerialRecvData.at(i);
               }
               ui->textBrowser->append(MainSerialRecvData);//将数据显示到textBrowser
          }else{
               qDebug()<<"接受数据出错";
          }
     }
}

/*数据发送*/
void MainWindow::on_pushButton_2_clicked()
{
    QByteArray txdata;

    if(port!=NULL&&port->isOpen())
    {
        txdata = ui->lineEdit->text().toLatin1();
        port->write(txdata);
        ui->lineEdit->clear();
    }
    else
    {
         qDebug() <<"串口未打开!";
    }
}

调用write发送数据是将数据写入了内部发送数据缓冲区,并不等于马上从底层串行端口发出,真正发出去的时间受电脑当前性能的影响。这一点在我们一般的使用过程中不会受到太大影响。使用flush()可尽可能的将发送缓冲区的数据从端口发出,在大多数的情况下,不需要使用它。

附上一个简单的例程:点击下载

<think>好的,我现在需要处理用户关于Flutter框架如何适配华为鸿蒙操作系统的问题。首先,我需要理解用户的具体需求。用户可能正在开发一个跨平台应用,希望将现有的Flutter项目迁移到HarmonyOS NEXT,或者想了解如何开始这样的适配工作。 接下来,我要回顾提供的引用内容。引用[1]到[4]主要涉及HarmonyOS NEXT与Flutter的混合开发环境安装、兼容性、编译配置以及具体步骤。例如,引用[3]提到Flutter项目成功编译到HarmonyOS NEXT,并给出了工具链的配置信息,这说明官方可能已经提供了一些支持。引用[4]则提到创建新的Flutter工程并执行命令,这可能是适配的初步步骤。 我需要确认当前的适配方案是否官方支持。根据引用[2],HarmonyOS NEXT是否支持Flutter,是否有文档,解决方案可能指向官方文档或社区资源。用户可能关心的是官方指南是否存在,或者是否需要依赖第三方解决方案。 然后,我需要整理适配的关键步骤。根据引用[4],创建新工程是一个步骤,但可能还需要配置SDK路径、工具链如Hvigorw等,如引用[3]所示的环境配置。此外,可能需要处理平台特定的代码或依赖项,确保Flutter的渲染引擎与HarmonyOS的图形接口兼容。 另外,性能优化和API兼容性也是需要考虑的。HarmonyOS可能有不同的系统API,Flutter插件可能需要适配这些接口,比如网络、存储、传感器等。同时,UI组件可能需要调整以适应鸿蒙的设计规范。 用户还可能关心实际案例,是否有成功接入的应用,以及开发过程中可能遇到的常见问题。引用[3]提到运行后的正确配置效果,这说明存在可行的配置方法,但可能需要详细的步骤指导。 最后,需要确保回答结构清晰,分步骤说明适配流程,引用相关文档和资源,并预见到用户可能提出的进一步问题,如性能调优、特定功能适配等,从而生成相关问题供用户参考。</think>### Flutter框架适配华为鸿蒙操作系统的开发指南与解决方案 #### 1. **环境配置与工具链支持** Flutter适配HarmonyOS NEXT需要**安装特定的SDK和工具链**。根据官方文档,需配置OpenHarmony SDK路径,并通过DevEco Studio集成开发环境进行管理。例如,引用[3]中提到工具链包含`Hvigorw`构建工具,需确保Node.js和Ohpm包管理器的版本兼容性: ```bash # 示例环境配置路径 OpenHarmony Sdk路径:/Users/apple/Desktop/Code/Harmony/command-line-tools/sdk Ohpm版本:5.0.2 Node版本:v18.20.1 ``` #### 2. **项目初始化与工程结构适配** 使用Flutter命令行工具**创建新项目**,并调整工程结构以匹配HarmonyOS的模块化要求: ```bash flutter create my_harmony_app # 创建新Flutter工程[^4] ``` 需在`pubspec.yaml`中添加HarmonyOS特定依赖,并检查`android`目录替换为HarmonyOS模块(如`entry`模块)。 #### 3. **渲染引擎与API兼容性** - **渲染层适配**:Flutter的Skia引擎需与HarmonyOS的图形子系统(如`@ohos.graphics`)对接,确保UI渲染无异常。 - **平台通道(Platform Channel)**:通过`MethodChannel`调用HarmonyOS原生能力(如传感器、通知),需编写Java/ArkTS插件代码: ```dart // Flutter端调用示例 const channel = MethodChannel('com.example/native'); final result = await channel.invokeMethod('getHarmonyOSVersion'); ``` #### 4. **构建与调试** 使用**Hvigor构建系统**替代Gradle,配置`build-profile.json`定义编译任务: ```json { "targets": [ { "name": "entry", "type": "application", "dependencies": ["flutter"] } ] } ``` 通过DevEco Studio的**真机调试功能**验证运行效果,如引用[3]中提到的设备运行截图。 #### 5. **官方支持与社区资源** 目前HarmonyOS NEXT对Flutter的适配**仍处于早期阶段**,官方文档尚未完全开放,但可通过[OpenHarmony社区](https://gitee.com/openharmony)获取实验性支持。引用[2]指出已有部分开发者成功接入,建议关注华为开发者联盟的更新。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值