QT上位机01-串口接收数据

基本构图

前置条件

安装QSerialPort部件

完成路线

0-引用

打开help,查看

引用放在weight.hqmake放在pro文件下

1-画图,

首先构思出要干些啥,哪些功能配哪些部件比较好,等等,重命名一下方便调用,这儿使用cambo组件,能更清晰的显示端口号等信息。

等等,没有全截图下来,差不多是这个意思,有的是自己写的选择的,但是如串口端口等是系统检查后,添加到这里面的,在下文中有体现。

2读取端口信息,并新建端口对象

用此函数来读取,并通过遍历显示在在combo下面,同时,创建一个指向QSerialPort类型的weight里的全局变量,因为接下来的读取打开等操作都要用到(不可以单独创建,要不然读不到东西)

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QList<QSerialPortInfo> List= QSerialPortInfo::availablePorts();
    for (int i=0;i<List.size();i++){
        ui->comboBox_com->addItem(List.at(i).portName());
    }

    serial = new QSerialPort;
    connect(serial,&QSerialPort::readyRead,this,&Widget::recvSlot);

}

打开串口

使用push_button的槽函数,读取屏幕当前被选择的内容(端口号,波特率等等),并打开

应该能看懂吧

void Widget::on_pushButton_clicked()
{
    //选择你要打开的串口
    serial ->setPort(QSerialPortInfo(ui->comboBox_com->currentText() ));
    //设置波特率
    if(ui->comboBox__bote->currentText()=="115200"){
        serial->setBaudRate(QSerialPort::Baud115200);
    }
    else if(ui->comboBox__bote->currentText()=="9600"){
        serial->setBaudRate(QSerialPort::Baud9600);
    }
    //设置奇偶校验位
    if(ui->comboBox_->currentText()=="None"){
        serial->setParity(QSerialPort::NoParity);
    }else if(ui->comboBox_->currentText()=="Odd"){
        serial->setParity(QSerialPort::OddParity);
    }else if(ui->comboBox_->currentText()=="Even"){
        serial->setParity(QSerialPort::EvenParity);
    }
    //设置停止位
    if(ui->comboBox_stop->currentText()=="1"){
        serial->setStopBits(QSerialPort::OneStop);
    }else if(ui->comboBox_stop->currentText()=="1.5"){
        serial->setStopBits(QSerialPort::OneAndHalfStop);
    }

    //打开串口
    bool info = serial->open(QIODevice::ReadWrite);
    if(info== true){
        qDebug()<<"success";
    }else if(info == false){
        qDebug()<<"faild";
    }


    //调试信息
}

好的,现在如果打开成功的话,应该就会在调试界面打印success

最后一步:写读取内容并打印到文本框的槽函数(信号与槽):

1、在weight.h声名槽函数

void recvSlot(void);

2.将信号与槽进行连接

connect(serial,&QSerialPort::readyRead,this,&Widget::recvSlot);

3.写槽函数

void Widget::recvSlot()
{
    //接收
    QByteArray data=serial->readAll();
    //显示
    ui->textEdit->append(data);

}

成品

#初版,需要增添的内容有:每个程序代码写的原因以及语法(!!!基础薄弱)

太累了,今天不想干了,看懂了再干吧

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现串口接收数据上位机,可以借助Qt5自带的串口通信库进行操作。下面是一个简单的Qt5串口接收数据上位机的示例: 1. 创建一个新的Qt Widgets应用程序项目,添加一个QPushButton和一个QTextEdit控件。 2. 在按钮的槽函数中添加如下代码,用于打开串口并接收数据: ```c++ void MainWindow::on_btnOpen_clicked() { // 打开串口 QString portName = ui->cmbPortName->currentText(); int baudRate = ui->cmbBaudRate->currentText().toInt(); QSerialPort serialPort; serialPort.setPortName(portName); serialPort.setBaudRate(baudRate); if (serialPort.open(QIODevice::ReadWrite)) { ui->textEdit->append("串口打开成功!"); connect(&serialPort, &QSerialPort::readyRead, this, &MainWindow::on_serialPort_readyRead); } else { ui->textEdit->append("串口打开失败!"); } } void MainWindow::on_serialPort_readyRead() { // 接收串口数据 QSerialPort *serialPort = qobject_cast<QSerialPort *>(sender()); QByteArray data = serialPort->readAll(); ui->textEdit->append(QString(data)); } ``` 3. 在MainWindow类的构造函数中,初始化串口参数并添加可用的串口列表: ```c++ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 初始化串口参数 ui->cmbBaudRate->addItems(QStringList() << "9600" << "115200"); foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { ui->cmbPortName->addItem(info.portName()); } } ``` 4. 编译运行程序,选择正确的串口参数并点击按钮打开串口,即可开始接收数据。 以上是一个简单的Qt5串口接收数据上位机的示例,您可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值