精华内容
下载资源
问答
  • Qt4串口通信图文讲解

    2020-07-15 16:42:28
    https://blog.csdn.net/cgb165937385/article/details/8861859
    展开全文
  • Qt》part 5 Qt5.5.0串口通信

    千次阅读 2016-09-05 17:00:49
    Qt》part 5 Qt5.5.0串口通信 1、该程序时在Qt5.5.0环境下调试的,该版本Qt自带串口库,只需调用即可。 2、新建Qt application:SerialTest 3、serialtest.h 4、serialtest.cpp 5、main.cpp 7、serialtest.ui 6、...

    《Qt》part 5 Qt5.5.0串口通信

    文章借鉴博客

         在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况。因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分。因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据。
       本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快。


    1、该程序时在Qt5.5.0环境下调试的,该版本Qt自带串口库,只需调用即可。

    2、新建Qt application:SerialTest,对话框程序

    注:创建成功后需要在属性——链接器——输入——附加依赖项:添加Qt的串口通信静态链接库:Qt5SerialPort.lib和Qt5SerialPortd.lib,分别对应release版和debug版,否则编译会出现链接错误,找不到对应的dll。

    3、serialtest.h.

    #ifndef SERIALTEST_H
    #define SERIALTEST_H
    
    #include <QtWidgets/QDialog>
    #include "ui_serialtest.h"
    
    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>
    #include <QTimer>
    #include <QDebug>
    #include <QTime>
    
    //namespace ui{
    //	class Widget;
    //}
    class SerialTest : public QDialog
    {
    	Q_OBJECT
    
    public:
    	SerialTest(QWidget *parent = 0);
    	~SerialTest();
    private:
    	QString getCurrentTime();
    
    private:
    	Ui::SerialTest ui;
    
    private:
    	QSerialPort *serialPort;
    	QTimer *timer;
    	QByteArray byteArray;
    
    private slots:
    	void slotSendData();
    	void slotReadData();
    	void on_pushButtonStart_clicked();
    	void on_pushButtonStop_clicked();
    	void on_pushButtonOpenCom_clicked();
    	void on_pushButtonCloseCom_clicked();
    };
    
    #endif // SERIALTEST_H
    


    4、serialtest.cpp

    #include "serialtest.h"
    #include <ui_serialtest.h>
    
    
    SerialTest::SerialTest(QWidget *parent)
    	: QDialog(parent)
    {
    	ui.setupUi(this);
    	timer = new QTimer(this);
    	connect(timer, SIGNAL(timeout()),this,SLOT(slotSendData()));
    
    	serialPort = new QSerialPort(this);
    	foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    	{
    		serialPort->setPort(info);
    		if (serialPort->open(QIODevice::ReadWrite))
    		{
    			ui.comboBoxCom->addItem(info.portName());
    			ui.textEditInfo->append(QStringLiteral("检测到端口列表"));
    			ui.textEditInfo->append(info.portName());
    			ui.textEditInfo->append(info.description());
    			ui.textEditInfo->append(info.manufacturer());
    			serialPort->close();
    		}
    	}
    
    	connect(serialPort, SIGNAL(readyRead()), this, SLOT(slotReadData()));
    	ui.comboBoxBaudRate->setCurrentIndex(0);
    	ui.pushButtonStart->setEnabled(false);
    	ui.pushButtonStop->setEnabled(false);
    	ui.pushButtonCloseCom->setEnabled(false);
    
    }
    
    SerialTest::~SerialTest()
    {
    	/*delete ui;*/
    	if (timer->isActive())
    	{
    		timer->stop();
    	}
    }
    
    void 
    SerialTest::slotSendData()
    {
    	QByteArray temp;
    	temp.append(getCurrentTime());
    	temp.append("#");
    	serialPort->write(temp);
    }
    
    void 
    SerialTest::slotReadData()
    {
    	QByteArray temp = serialPort->readAll();
    
    	if (!temp.isEmpty())
    	{
    		byteArray.append(temp);
    		if (byteArray.contains("#"))
    		{
    			ui.textEditReceive->setText(byteArray.split('#').at(0));
    			byteArray = byteArray.right(byteArray.length() - byteArray.indexOf('#') - 1);
    		}
    	}
    }
    
    void 
    SerialTest::on_pushButtonStart_clicked()
    {
    	timer->start(0);//能发多快就发多快
    }
    
    void 
    SerialTest::on_pushButtonStop_clicked()
    {
    	if (timer->isActive())
    	{
    		timer->stop();
    	}
    }
    
    void 
    SerialTest::on_pushButtonOpenCom_clicked()
    {
    	serialPort->setPortName(ui.comboBoxCom->currentText());
    	serialPort->open(QIODevice::ReadWrite);
    	serialPort->setBaudRate(ui.comboBoxBaudRate->currentText().toInt());
    	serialPort->setDataBits(QSerialPort::Data8);
    	serialPort->setParity(QSerialPort::NoParity);
    	serialPort->setStopBits(QSerialPort::OneStop);
    	serialPort->setFlowControl(QSerialPort::NoFlowControl);
    
    	ui.pushButtonOpenCom->setEnabled(false);
    	ui.pushButtonCloseCom->setEnabled(true);
    	ui.pushButtonStart->setEnabled(true);
    	ui.pushButtonStop->setEnabled(true);
    
    }
    
    void 
    SerialTest::on_pushButtonCloseCom_clicked()
    {
    	if (serialPort->isOpen())
    	{
    		serialPort->close();
    		ui.pushButtonOpenCom->setEnabled(true);
    		ui.pushButtonCloseCom->setEnabled(false);
    		ui.pushButtonStart->setEnabled(false);
    		ui.pushButtonStop->setEnabled(false);
    	}
    }
    
    QString
    SerialTest::getCurrentTime()
    {
    	QDateTime dateTime = QDateTime::currentDateTime();
    	return dateTime.toString("hh-mm-ss-zzz");
    }
    


    5、main.cpp

    #include "serialtest.h"
    #include <QtWidgets/QApplication>
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	SerialTest w;
    	w.show();
    	return a.exec();
    }
    


    7、serialtest.ui


    6、运行界面:

    软件之间调试

    1)、首先通过虚拟串口创建COM端口;

    2)、打开编译的软件,选择一个端口;

    3)、打开串口调试助手,选择另一个端口。

    4)注意点:给本程序发数据时要加上#结尾,否则是无法发送成功的。



    展开全文
  • Qt QSerialPort 串口通信程序

    千次阅读 2020-02-27 15:59:38
    串口接收并以16进制显示功能 待解决问题: 一次性不能接收超过32个字节的数组 3.程序结构 4.主要代码 Qt_SerialPort.pro #------------------------------------------------- # # Project created by QtCreator ...

    1.程序界面

    在这里插入图片描述

    2.程序功能

    • 16进制和非16进制的发送功能
    • 串口接收并以16进制显示功能
      待解决问题:
      一次性不能接收超过32个字节的数组

    3.程序结构

    在这里插入图片描述

    4.主要代码

    Qt_SerialPort.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2020-02-27T14:15:03
    #
    #-------------------------------------------------
    
    QT       += core gui
    QT       += serialport
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = Qt_USART
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which as been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    
    SOURCES += \
            main.cpp \
            mainwindow.cpp
    
    HEADERS += \
            mainwindow.h
    
    FORMS += \
            mainwindow.ui
    
    

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QSerialPort>
    #include <QSerialPortInfo>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        QByteArray HexStringToByteArray(QString HexString);
        QString ByteArrayToHexString(QByteArray data);
    
    private slots:
        void on_Button_detect_clicked();
    
        void on_Button_OpenPort_clicked();
    
        void on_pushButton_clear_rev_clicked();
    
        void on_pushButton_clear_send_clicked();
    
        void on_checkBox_hex_send_clicked(bool checked);
    
        void on_pushButton_serial_send_clicked();
    
        void on_checkBox_hex_display_clicked(bool checked);
    
        void serialPort_readyRead();
    
    private:
        Ui::MainWindow *ui;
        QSerialPort serial;
    };
    
    #endif // MAINWINDOW_H
    
    

    main.cpp

    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.setWindowTitle("Qt串口通信例程");
        w.show();
    
        return a.exec();
    }
    
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QMessageBox>
    #include <QDebug>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        //发送按键失能
        ui->pushButton_serial_send->setEnabled(false);
        //波特率默认选择下拉第三项:115200
        ui->Box_baudrate->setCurrentIndex(4);
    
        ui->checkBox_hex_display->setCheckState(Qt::Checked);
        ui->checkBox_hex_display->setEnabled(false);
    
        //连接信号和槽
        QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPort_readyRead);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_Button_detect_clicked()
    {
        ui->Box_portnum->clear();
        //通过QSerialPortInfo查找可用串口
        foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
        {
            ui->Box_portnum->addItem(info.portName());
        }
    }
    
    void MainWindow::on_Button_OpenPort_clicked()
    {
        if(ui->Button_OpenPort->text()==QString("打开串口"))
        {
            //设置串口名
            serial.setPortName(ui->Box_portnum->currentText());
            //设置波特率
            serial.setBaudRate(ui->Box_baudrate->currentText().toInt());
            //设置数据位数
            switch(ui->Box_dataBits->currentIndex())
            {
            case 8: serial.setDataBits(QSerialPort::Data8); break;
            default: break;
            }
            //设置奇偶校验
            switch(ui->Box_Parity->currentIndex())
            {
            case 0: serial.setParity(QSerialPort::NoParity); break;
            default: break;
            }
            //设置停止位
            switch(ui->Box_stopBits->currentIndex())
            {
            case 1: serial.setStopBits(QSerialPort::OneStop); break;
            case 2: serial.setStopBits(QSerialPort::TwoStop); break;
            default: break;
            }
            //设置流控制
            serial.setFlowControl(QSerialPort::NoFlowControl);
    
            //打开串口
            if(!serial.open(QIODevice::ReadWrite))
            {
                QMessageBox::about(NULL, "提示", "无法打开串口!");
                return;
            }
    
            //下拉菜单控件失能
            ui->Box_portnum->setEnabled(false);
            ui->Box_baudrate->setEnabled(false);
            ui->Box_dataBits->setEnabled(false);
            ui->Box_Parity->setEnabled(false);
            ui->Box_stopBits->setEnabled(false);
    
            ui->Button_OpenPort->setText(QString("关闭串口"));
            //发送按键使能
            ui->pushButton_serial_send->setEnabled(true);
        }
        else
        {
            //关闭串口
            serial.close();
    
            //下拉菜单控件使能
            ui->Box_portnum->setEnabled(true);
            ui->Box_baudrate->setEnabled(true);
            ui->Box_dataBits->setEnabled(true);
            ui->Box_Parity->setEnabled(true);
            ui->Box_stopBits->setEnabled(true);
    
            ui->Button_OpenPort->setText(QString("打开串口"));
            //发送按键失能
            ui->pushButton_serial_send->setEnabled(false);
        }
    }
    
    void MainWindow::on_pushButton_clear_rev_clicked()
    {
        ui->textEdit_receive->clear();
    }
    
    void MainWindow::on_pushButton_clear_send_clicked()
    {
        ui->textEdit_send->clear();
    }
    
    void MainWindow::on_checkBox_hex_display_clicked(bool checked)
    {
        if(checked == true)
        {
    
        }
        else
        {
    
        }
    }
    
    void MainWindow::on_checkBox_hex_send_clicked(bool checked)
    {
        if(checked == true)
        {
    
        }
        else
        {
    
        }
    }
    
    void MainWindow::on_pushButton_serial_send_clicked()
    {
        //获取界面上的数据并转换成utf8格式的字节流
        QByteArray data;
    
        if(ui->checkBox_hex_send->isChecked() == true)
            data = HexStringToByteArray(ui->textEdit_send->toPlainText());
        else
            data = ui->textEdit_send->toPlainText().toUtf8();
    
        serial.write(data);
        /*也可以定长发送*/
        //serial.write((const char *)param_data, 16);
    }
    
    void MainWindow::serialPort_readyRead()
    {
        //从接收缓冲区中读取数据
        QByteArray buffer = serial.readAll();
    
        //将16进制
        QString display_str = ByteArrayToHexString(buffer);
    
        //从界面中读取以前收到的数据
        QString recv = ui->textEdit_receive->toPlainText();
        recv += QString(display_str);
        //清空以前的显示
        ui->textEdit_receive->clear();
        //重新显示
        ui->textEdit_receive->append(recv);
    }
    
    /*
     * @breif 将16进制字符串转换为对应的字节序列
     */
    QByteArray MainWindow::HexStringToByteArray(QString HexString)
    {
        bool ok;
        QByteArray ret;
        HexString = HexString.trimmed();
        HexString = HexString.simplified();
        QStringList sl = HexString.split(" ");
    
        foreach (QString s, sl) {
            if(!s.isEmpty())
            {
                char c = s.toInt(&ok,16)&0xFF;
                if(ok){
                    ret.append(c);
                }else{
                    qDebug()<<"非法的16进制字符:"<<s;
                    QMessageBox::warning(0,tr("错误:"),QString("非法的16进制字符: \"%1\"").arg(s));
                }
            }
        }
        //qDebug()<<ret;
        return ret;
    }
    
    /*
     * @breif 将字节序列转换为对应的16进制字符串
     */
    QString MainWindow::ByteArrayToHexString(QByteArray data){
        QString ret(data.toHex().toUpper());
        int len = ret.length()/2;
        qDebug()<<len;
        for(int i=1;i<len;i++)
        {
            //qDebug()<<i;
            ret.insert(2*i+i-1," ");
        }
    
        return ret;
    }
    
    
    
    

    程序源码:https://download.csdn.net/download/u014779536/12195819

    展开全文
  • Qt串口通信总结

    千次阅读 2018-02-26 17:20:31
    QT += serialport3、在头文件添加串口类// 提供访问串口的功能 #include &lt;QSerialPort&gt; // 提供系统中存在的串口信息 #include &lt;QSerialPortInfo&gt; 4、设置界面5、头文件#ifndef ...

    1、创建桌面程序

    2、在.pro添加串口支持:

    #增加串口支持
    QT       += serialport

    3、在头文件添加串口类

    // 提供访问串口的功能
    #include <QSerialPort>
    // 提供系统中存在的串口信息
    #include <QSerialPortInfo>
    

    4、设置界面


    5、头文件

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QDebug>
    // 提供访问串口的功能
    #include <QSerialPort>
    // 提供系统中存在的串口信息
    #include <QSerialPortInfo>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_clearBtn_clicked();
    
        void on_sendBtn_clicked();
    
        void on_openBtn_clicked();
    
        void read_data();
    
    private:
        Ui::MainWindow *ui;
        QSerialPort *serial;
    };
    
    #endif // MAINWINDOW_H
    

    6、cpp文件

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QIODevice>
    #include <QComboBox>
    #include <QObject>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        // 查找可用的串口
        // 这个foreach的意思:
        // QSerialPortInfo::availablePorts()返回一个列表,列表里每个个体是const QSerialPortInfo &info
        // 遍历这些info
        foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
        {
            QSerialPort serial;
            serial.setPort(info);
            // 端口如果可以操作读写的话
            if(serial.open(QIODevice::ReadWrite))
            {
                ui->portBox->addItem(serial.portName());
                serial.close();
            }
        }
        // 波特率菜单默认显示第3项
        ui->baudBox->setCurrentIndex(3);
        // 关闭发送按钮的功能
        ui->sendBtn->setEnabled(false);
        qDebug()<<tr("界面设定成功");
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    // 清空接收窗口
    void MainWindow::on_clearBtn_clicked()
    {
        ui->receiveText->clear();
    }
    // 发送数据
    void MainWindow::on_sendBtn_clicked()
    {
        serial->write(ui->sendText->toPlainText().toLatin1());
    }
    // 打开串口
    void MainWindow::on_openBtn_clicked()
    {
    
        if(ui->openBtn->text()==tr("打开串口"))
        {
            serial = new QSerialPort;
            // 设置串口名
            serial->setPortName(ui->portBox->currentText());
            // 打开串口
            serial->open(QIODevice::ReadWrite);
            // 设置波特率
            serial->setBaudRate(ui->baudBox->currentText().toInt());
            // 设置数据位数
            switch(ui->bitNumBox->currentIndex())
            {
            case 8:
                serial->setDataBits(QSerialPort::Data8);
                break;
            default:
                break;
            }
            // 设置奇偶校验
            switch(ui->parityBox->currentIndex())
            {
            case 0:
                serial->setParity(QSerialPort::NoParity);
                break;
            default:
                break;
            }
            // 设置停止位
            switch(ui->stopBox->currentIndex())
            {
            case 1:
                serial->setStopBits(QSerialPort::OneStop);
                break;
            case 2:
                serial->setStopBits(QSerialPort::TwoStop);
                break;
            default:
                break;
            }
            // 设置流控制
            serial->setFlowControl(QSerialPort::NoFlowControl);
            // 关闭设置菜单功能
            ui->portBox->setEnabled(false);
            ui->baudBox->setEnabled(false);
            ui->bitNumBox->setEnabled(false);
            ui->parityBox->setEnabled(false);
            ui->stopBox->setEnabled(false);
            ui->openBtn->setText(tr("关闭串口"));
            ui->sendBtn->setEnabled(true);
            // 连接信号槽
            QObject::connect(serial,SIGNAL(readyRead()),this,SLOT(read_data()));
        }else
        {
            // 关闭串口
            serial->clear();
            serial->close();
            serial->deleteLater();
            // 恢复设置功能
            ui->portBox->setEnabled(true);
            ui->baudBox->setEnabled(true);
            ui->bitNumBox->setEnabled(true);
            ui->parityBox->setEnabled(true);
            ui->stopBox->setEnabled(true);
            ui->openBtn->setText(tr("打开串口"));
            ui->sendBtn->setEnabled(false);
        }
    }
    void MainWindow::read_data()
    {
        QByteArray buf;
        buf = serial->readAll();
        if(!buf.isEmpty())
        {
            QString str = ui->receiveText->toPlainText();
            str+=tr(buf);
            ui->receiveText->clear();
            ui->receiveText->append(str);
        }
        buf.clear();
    }
    

    7、串口模式1

    1起始位,8数据位,1停止位。这就是8-n-1的模式(8数据位,没有校验位,1停止位)

    8、16进制传输

    写入:

        QString str = ui->sendText->toPlainText();// 取出文本
    
        QByteArray ba = QByteArray::fromHex(str.toLatin1().data());// 直接把字面当作16进制读取,使用fromHex,自动会将这些char两两组成一个字节
    
        serial->write(ba);// 写入QByteArray

    接收:

        QByteArray ba = serial->readAll();// 从QSerialPort读取到的是QByteArray
    
        QString str = ba.toHex().data();// 转为16进制的时候要指定toHex
    
        ui->receiveText->append(str);

    如果觉得这样输出不好认,则可以将每个字节中间用空格隔开(两个字符一个字节),然后小写转大写:

        QByteArray ba = serial->readAll();// 从QSerialPort读取到的是QByteArray
    
        QString str = ba.toHex().data();// 转为16进制的时候要指定toHex
    
        QString strOut;
    
        for(int i = 0;i<str.length();i+=2)
        {
            QString s = str.mid(i,2);
            strOut += s;
            strOut += " ";
        }
    
        ui->receiveText->append(strOut.toUpper());

    9、位、字节等计算机信息单位辨析

    位(Bit,即比特):最小的计算机信息单位,因为计算机本质上来说只存储0和1,即高电平和低电平,换算成2进制的一个位;

    字节(Byte):8个位组成一个字节。用各进制表示:

    二进制        十进制        16进制

    //__________正数____________

    00000000        0                00

    00000001        1                01

    ...

    01111111        127            7F

    0~127共128个正数

    //___________负数____________

    11111111        -1                FF(注意这个FF为什么不是代表255?因为他这里包含了符号)

    11111110        -2                FE

    ...

    10000000        -128            80

    -1~-128共128个负数

    所以一个字节可以表示128+128=256个数。

    十进制即(-128~127)

    16进制没有负数,用补码表示的,即(80~7F)

    16进制两位构成一个字节;

    16进制每一位占用半个字节;

    原码:二进制定点表示法,即最高位为符号位,0表示正,1表示负(原码简单理解就是字面意义的码,比如1就是00000001,2就是00000002);

    反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,但符号位除外;(暂时不要去管反码,免得与其他概念弄混)

    补码:正数的补码与其原码相同,负数的补码是其绝对值的原码逐位取反最后加1得到。

    计算机数据是用补码表示的。正数的补码就是他的原码,负数的补码是将其原码(取绝对值后的原码)逐位取反加1得到。

    比如,一个字节最大应该是01111111,第一位0表示他是正数,他的值是127(其实二进制表示的时候0可能省略,即表示位1111111);

    最小应该是10000000(1表示他是负数,而0000000则无疑是最小的),他的值是-128;

    11111111表示他是负数(1打头),然后他的值最大,每位都是1,他的值是-1,是最大的负数。

    那么看下1和-1的计算机补码表示法是怎么通过原码(字面意义的码)转换得到的:

    1->原码(即字面意义的码)->00000001->补码与原码相同

    -1->原码(先不管负号,暂时记为1)->00000001->取反->11111110->加1->11111111







    本文参考了以下文章,在此表示感谢:http://blog.csdn.net/u014695839/article/details/50611549



    展开全文
  • cmake编译QT5串口通信

    千次阅读 2015-06-25 09:02:16
    cmake编译QT4工程  参见博客: 用CMake 构建Qt 项目  2. cmake编译QT5   2.1 QT5 与qt4的区别:  主要是QT5将qt库的相应模块进行了分离,必须将自己用到的模块分别添加进去,find_package(Qt5Widgets REQUIRED...
  • Qt5串口通信(三)

    2015-05-26 17:36:14
    前沿 ...Qt4串口插件QtSerialPort模块,但是,当你深入使用时会发现许多问题,有的功能尚未实现,于是让我陷入了深深的漩涡之中,久久不能自拔。一般串口的使用都会和硬件相连,一般出现问题很奇葩
  • 基于Qt4编写的串口通信,包含界面和两套样式表,界面操作方便使用,通信亲测准确有效。
  • Qt串口通信小结

    2020-02-12 00:15:56
    Qt串口通信小结 1.串口声明与定义 2.扫描可用串口(以ComboBox为例) 3.连接串口 4.串口读取数据 5.串口发送数据 Qt串口详细资料,请参考QSerialport官方文档https://doc.qt.io/qt-5/qserialport.html Qt串口...
  • 在与串口通信时,我需要给串口发送指定报文格式的命令,在接收到串口返回的数据后需要转换成浮点数并且显示出来。这里讲一下我自己碰到的问题,以及我发现的解决方法,如果大家有更好的方法可以在下方留言一起讨论。...
  • Qt 串口通信

    2020-08-19 12:58:20
    查找可用的串口 QList<QSerialPortInfo> localAvailablePorts = QSerialPortInfo::availablePorts(); //构造串口实例 QSerialPort *serial = new QSerialPort; serial->setPortName("COM4");//设置串口名 ...
  • 第一部分: 下面我们将讲述编程的...1.打开Qt Creator,新建Qt4 Gui Application,工程名设置为mycom,其他使用默认选项。 (注意:建立的工程路径不能有中文。) 2.将上面所说的6 个文件复制到工程文件夹下,如下图。
  • 好久没写CSDN,一直在刚QT,可惜坑有点多,一点点整理吧,否则自己都忘光了。自己借鉴的百度文库上的一个串口助手,然后再其基础上不断改进的。 ... 常用的串口文件: qextserialbase.h qextserial.cpp ...
  • Qt串口通信,QSerialPort的使用

    万次阅读 2019-02-16 17:11:12
    Qt写上位机时,串口通信是个常用功能,在Qt4的时候有第三方模块QextSerialPort,到了Qt5.1官方提供了QSerialPort模块。 目录 前言 获取串口信息:QSerialPortInfo 串口IO操作:QSerialPort 实例操作 补充:16...
  • Qt 串口通信(QSerialPort)

    2020-10-22 14:05:28
    前言: ...与下位机,单片机通信少不了使用串口进行通信,Qt 也提供了串口通信的类 QSerialPort https://doc.qt.io/qt-5.9/qserialport.html //小伙伴们具体去看文档 1 使用的时候在 pro 添.
  • Qt 4.x linux 串口通信(SerialPort)

    千次阅读 多人点赞 2019-08-14 12:13:57
    之前写过一篇Qt 5.x+串口通信的文章: https://blog.csdn.net/weixin_42837024/article/details/81669540 现在环境变为 qt 4.8 没有Qt 封装的跨平台的 串口类 可以使用网上开源的 posix_qextserialport,...
  • Qt学习【4串口通信

    2019-08-26 17:58:12
    QT += serialport 2、创建新的串行接口 //! [1] serial = new QSerialPort(this); //! [1] 3、设置串口参数 serial->setPortName(p.name); // 串口名字 serial->setBaudRate(p....
  • greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport QT+=network QT+=serialport .h文件: #ifndef COMTHREAD_H #define COMTHREAD_H #include #include #include <QtSerialPort/QSerialPort> #...
  • Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题。 1、在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portNameComboBox,条目为:...
  • 前言: 本文讲述的 QSerialPort 是在qt5 + 版本以上才有 qt 4.x + linux 环境 请看这篇 ...与下位机,单片机通信少不了使用串口进行通信,Qt 也提供了串口通信的类 QSerialPort https://doc.qt.io/qt-5.9/q...
  • Qt串口案例

    2020-05-15 22:23:54
    Qt串口案例概述:代码示例:.pro.h....4. 如果大家想知道串口通信方式以及连线方式可以参考我前面的文章 5. 本案例数据模式是ACELL格式,本案例带有收发数据记录存储功能 代码示例: .pro #------------------
  • 通过自定义通信协议,达到以串口发送指令,使STM32单片机能够根据指令控制继电器的通断时间,从而方便开关机的实验。 上位机的使用方法: 自定义通信协议( ee 00 12 04 ff) ee:帧数据的头部 00 12:十六进制数 --》...
  • 1、C语言基本数据类型 在C语言中,仅有4种基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。 整型包括char(字符)、short(短整型)、...
  • 编译器:QT PLC测试工具:ModScan32.exe 依赖文件:libmodbus 编写流程: 1.打开端口; 2.设置从地址(device id) 3.建立连接 4.设置应答延时 5.读/写 数据 6.关闭modbus端口 7.释放modbus资源
  • linux下基于QT串口程序

    万次阅读 2016-09-21 11:10:25
    Qt5发布之前,Qt实现串口通信一般是采用第三方类库qextserialport。Qt5发布后自带了QtSerialPort 能够支持串口通信。 一:QT5.0以下版本 1.在工程中引入4个文件。 qextserialbase.cpp和qextserialbase.h 以及...
  • 初次使用QT5串口类QSerialPort

    万次阅读 热门讨论 2016-05-25 11:24:38
    因为工作需要,现在正在学习Qt的串口通信Qt4的话需要使用第三方类,使用起来也非常简单,只需要把对应的文件添加到自己的项目中就可以了,我参考的是Qt论坛上的demo,刘大师和yafei的demo都非常详细,网上都可以...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

qt4串口通信