精华内容
下载资源
问答
  • QT串口编程

    2014-08-19 11:15:09
    QT串口编程,实现qt的串口通信,内含源码
  • qextserialport-1.2win-alpha,QT串口编程第三方库,适合于windows、linux下的QT串口编程
  • QT 串口编程

    2015-06-23 14:45:40
    该教程分三部分讲述,第一部分讲解qextserialport 类的一些东东;...Windows 下使用qextserialport 类实现串口通信的方法,这里将讲述两种不同的方法;第三部 分讲解在Linux 下利用qextserialport 类实现串口通信的方法
  • Qt串口编程

    2012-10-08 21:09:31
    经我收集整理,网罗网上大部分经典串口编程资料与代码,绝对不后悔。欢迎下载学习,别看资源分高,我也付出很多终能收集好。
  • qt串口编程

    千次阅读 2009-08-06 11:37:00
    qt串口编程管理提醒: 本帖被 XChinux 执行加亮操作(2008-04-22) [serial.cpp]#include #include #include "mainwindow.h"int main(int argc, char *argv[]){ QApplication a(argc,argv); 

    qt串口编程

    管理提醒:
    本帖被 XChinux 执行加亮操作(2008-04-22)
    [serial.cpp]
    #include <qapplication.h>
    #include <qmainwindow.h> 

    #include "mainwindow.h"
    int main(int argc, char *argv[])
    {
        QApplication a(argc,argv);
      MainWindow m;
       
        a.setMainWidget(&m);
        m.show();
      return a.exec();
    }


    [mainwindow.h]
    #ifndef MAIN_WINDOW_H
    #define MAIN_WINDOW_H

    #include <qmainwindow.h>

    class QLabel;
    class QPushButton;
    class QLineEdit;
    class QPixmap;
    class SerialThread;

    class MainWindow:public QMainWindow {
        Q_OBJECT
    public:
        MainWindow(QWidget * parent = 0, const char * name= 0) ;
        ~MainWindow(){};
       
        void setCounter(int no);
        void setMsgText(char* txt);
    public slots:   
        void serialOperate();
        void loadJPEGFile();
       
    protected:
        void    paintEvent( QPaintEvent * );
       
    private:
     
        QLineEdit *msg;
        QPushButton *btn;
        QPushButton *btn2LoadImg;
        QPixmap *pix;
        QLabel *lab;
        SerialThread *a;
        int counter;
    };

    #endif


    [mainwindow.cpp]

    #include <qlabel.h>     
    #include <qpushbutton.h> 
    #include <qvbox.h> 
    #include <qapplication.h>
    #include <qlineedit.h>
    #include <qpixmap.h>
    #include <qpainter.h>
    #include <qimage.h>
    #include <qstring.h>


    #include "mainwindow.h"   
    #include "serialthread.h"   

    void MainWindow::paintEvent( QPaintEvent * )
    {
        QPainter paint( this );
        paint.drawLine( 0,0,500,500 ); // draw line
            paint.drawPixmap(0,0,*pix);
            }

    void MainWindow::loadJPEGFile(){
         
        if(!pix->load("testjpeg")){
        //if(!pix->load("circle")){
            setMsgText("Load failed");
            return;
        }
        setMsgText("Load success!");
        update();
           
    }

    void MainWindow::setCounter(int no){
        counter = no;
    }

    void MainWindow::serialOperate(){
      a = new SerialThread(this);
        a->start();
        a->wait();
    }

    MainWindow::MainWindow(QWidget * parent , const char * name)
        :QMainWindow(parent, name)
    {
       
            counter = 0;
           
            QVBox *vbox;
            vbox = new QVBox(this);
            vbox->resize(300,150);
            //msg = new QLabel("SERIAL PROGRAMMING",vbox);
            msg = new QLineEdit("SERIAL PROGRAMMING",vbox);
            msg->resize(300,50);
           
            pix = new    QPixmap();             
           
            btn = new QPushButton(vbox);
            btn->setText("GO!");
            QApplication::connect(btn,SIGNAL(clicked()),this,SLOT(serialOperate()));
            btn2LoadImg = new QPushButton(vbox);
            btn2LoadImg->setText("LOAD");
           
            lab = new QLabel("before load jpeg",vbox);
            QApplication::connect(btn2LoadImg,SIGNAL(clicked()),this,SLOT(loadJPEGFile()));
           
            //btn->resize(100,75);
            //vbox->show();
    };

    void MainWindow::setMsgText(char* txt){
            QString msgs(txt);
            QString count = QString::number(counter,10);
            msgs.append(count);
            const    char *re = msgs.ascii ();         
            //strcat(msgs,);
            msg->setText(re);   
    };/


    [my_define.h]
    #define BAUDRATE    B115200
    #define BLOCK_SIZE    200   
    #define DEVICE        "/dev/ttyS0"
    #define WAIT_TIME    5
    #define CHANGE_LINE    0x0a
    #define ACK_NUM    3
    #ifndef TRUE
    #define TRUE 1
    #endif
    #ifndef FALSE
    #define FALSE -1
    #endif



    [serialthread.h]
    #ifndef SERIAL_THREAD_H
    #define  SERIAL_THREAD_H
    #include <qthread.h>

    class MainWindow;

    class SerialThread: public QThread {
    public:
        SerialThread(MainWindow *parent);
        virtual void run();
    private:
        MainWindow *parent;

    };
    #endif



    [serialthread.cpp]

    #include <sys/types.h>     
    #include <sys/stat.h>     
    #include <fcntl.h>     
    #include <termios.h>     
    #include <stdio.h> 

    #include "my_define.h"
    #include "serialthread.h"
    #include "mainwindow.h"



    int set_nc_mode(int fd)
    {
        struct termios options;
        if  ( tcgetattr( fd,&options)  !=  0){
              perror("SetupSerial 1");
              return(FALSE);
          } /* get current port settings */

        bzero(&options, sizeof(options)); 
        options.c_cflag |= BAUDRATE | CS8 | CLOCAL | CREAD; 
        options.c_cflag &= ~CRTSCTS;
        options.c_iflag = IGNPAR; 
        options.c_oflag &=~OPOST;           
            //
          options.c_lflag = 0;           
            options.c_cc[VTIME] = WAIT_TIME;
        options.c_cc[VMIN] = BLOCK_SIZE;    /* blocking read until 5 chars received */
       
        tcflush(fd, TCIFLUSH); 
        tcsetattr(fd,TCSANOW,&options);
        return(TRUE);
    }

    int set_c_mode(int fd)
    {
        struct termios options;
        if  ( tcgetattr( fd,&options)  !=  0){
              perror("SetupSerial 1");
              return(FALSE);
          }
        bzero(&options, sizeof(options));
        tcflush(fd, TCIOFLUSH);
        cfsetispeed(&options, BAUDRATE);
            cfsetospeed(&options, BAUDRATE);

        options.c_cflag |=(CLOCAL|CREAD);

        options.c_cflag &= ~CRTSCTS;

        options.c_cflag &= ~CSIZE;
        options.c_cflag |= CS8;

        options.c_cflag &= ~PARENB;  /* Clear parity enable,clear control mode flag */
        options.c_iflag &= ~INPCK;    /* Disable parity checking ,*/
        options.c_cflag &= ~CSTOPB;

        options.c_iflag |= IGNBRK;

        options.c_lflag |= ICANON;       
        options.c_lflag &= ~(ECHO | ECHOE | ISIG);
        options.c_oflag &= ~(OPOST);

        tcflush(fd, TCIOFLUSH);
          if (tcsetattr(fd,TCSANOW,&options) != 0){
              perror("SetupSerial 3");
            return (FALSE);
        }
        return(TRUE);
    }
    void send_ack(int fd)
    {
        char buf[]={'A','C','K',CHANGE_LINE};
        write(fd,buf,sizeof(buf));
    }
    void resend(int fd)
    {
        char buf[]={'R','S','D',CHANGE_LINE};
        write(fd,buf,sizeof(buf));
    }
    void delay(int i)
    {
        int j;
        for (;i>0;i--)
            for(j=0;j<65535;j++);
    }




    SerialThread::SerialThread(MainWindow *parent){
        this->parent = parent;
    }


    void SerialThread::run()
    {
        int fd,c, res;   
        int block_num,last_block;
        int i;   
        char buf[BLOCK_SIZE];             
        char file_name[32];
        FILE *fp;
        struct termios oldtio;

        block_num=last_block=0;
        fd = open(DEVICE, O_RDWR | O_NOCTTY ); 
       
        parent->setCounter(fd);
        parent->setMsgText("opend device fd::::::");   
       
       
        if (fd <0){
            perror(DEVICE); 
            parent->setMsgText("open device failed");   
        //    exit(-1); 
        }   
     
        tcgetattr(fd,&oldtio);
        set_nc_mode(fd);
        printf("Changed to nc mode/n");
        /*
        res=read(fd,( char *)file_name,32);
        parent->setCounter(res);
        parent->setMsgText("res is ::::::");   
        */

    /*
       

        if(res>0){
            file_name[res-1]='/0';
            printf("Received the file name:%s/n",file_name);
            }
        else
            printf("The received file name is error./n");

        fp=fopen(file_name,"wb");
        if(fp==NULL){
            printf("Can not creat file %s!/n",file_name);
            return;
        //    exit(-1);
            }
        else
            {
                send_ack(fd);
                printf("The file %s is created./nWaitting for the block num and last block size/n",file_name);
            }

        //set_nc_mode(fd);
        //printf("Changed to nc mode/n");

        res=read(fd,buf,4);
        printf("res=%d/n",res);
        printf("Received the block num /n");

        for(i=0,block_num=0;i<4;i++){
            block_num=block_num*10+buf;
            printf("buf[%d]=%x/n",i,buf);
            }
        printf("The number of blocks is %d/n",block_num);
        send_ack(fd);

        res=read(fd,buf,3);
        printf("res=%d/n",res);
        printf("Received the last block size /n");
            for(i=0,last_block=0;i<3;i++){
                    last_block=last_block*10+buf;
            printf("buf[%d]=%x/n",i,buf);
            }   
        printf("The last block size is %d/n",last_block);
        send_ack(fd);   

        printf("Starting receive blocks/n");

        for(i=0;i<block_num;i++){
            res=read(fd,buf,BLOCK_SIZE);
            if(res!=BLOCK_SIZE){
                            printf("res=%d,/t Request resend the %d block/n",res,i);
                i--;
                    tcflush(fd, TCIOFLUSH);
                resend(fd);
                }
            else{           
                fwrite(buf,1,BLOCK_SIZE,fp);
                printf("Received the %d block,    res=%d/n",i,res);
                printf("Send ack signal complete,waiting to read/n");
                send_ack(fd);
                }
        }
        printf("start transporting the last block/n");

        if(last_block>0){
            send_ack(fd);
            res=read(fd,buf,last_block);
            printf("res=%d/n",res);
                    if(res!=last_block){
                printf("Request resend the last block/n");
                tcflush(fd, TCIOFLUSH);
                            resend(fd);
                            }
            else
                fwrite(buf,1,last_block,fp);
            }
        send_ack(fd);
        printf("The file transports end/n");

        fclose(fp);
        printf("close the file/n");
        tcsetattr(fd,TCSANOW,&oldtio);
        close(fd);
        printf("close the serial port/n");
        */     
    }
    展开全文
  • Qt 串口编程

    2019-08-22 16:24:29
    QT += serialport main.cpp #include <QCoreApplication> #include <QString> #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> #inc...
    pro文件添加下面内容
    QT       += serialport

     main.cpp

    #include <QCoreApplication>
    #include <QString>
    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>
    #include <QDebug>
    #include <QTextCodec>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        //串口查找
        foreach (const QSerialPortInfo& info, QSerialPortInfo::availablePorts())
        {
            qDebug()<<"Name     :"<<info.portName();
            qDebug()<<"Description:"<<info.description();
        }
    
        QSerialPort *serial;
        serial = new QSerialPort;
        serial->setPortName("COM3");
        bool bOpen = serial->open(QIODevice::ReadWrite);  	//打开串口
        if(bOpen)
            qDebug()<<"open com3 success";
        else {
            qDebug()<<"open com3 failed";
        }
        serial->setBaudRate(9600);   //设置波特率
        serial->setDataBits(QSerialPort::Data8);  //设置数据位数
        serial->setParity(QSerialPort::NoParity); 	//设置奇偶校验
        serial->setStopBits(QSerialPort::OneStop);  	//设置停止位
        serial->setFlowControl(QSerialPort::NoFlowControl);	//设置流控制
    
        QString str = QString::fromUtf8("Hello world!中国");
        qDebug()<<str;
        str = "中国";
        const QByteArray Send_temp = str.toLocal8Bit();
        QByteArray Read_buf;
        int len = serial->write(Send_temp);
        qDebug()<<len;
        Read_buf = serial->readAll();
        //serial->close();
        return a.exec();
    }
    

     

    展开全文
  • qt串口编程基础.pdf

    2020-08-17 10:07:25
    qt 串口基础 串口编程基础知识讲解了使用qt进行串口编程(跨平台)常用的类,qt相关编程技术入门资料,适合初学者学习
  • linux下QT串口编程文件

    2017-01-01 16:22:20
    linux下QT串口编程文件
  • qt 串口编程

    2012-08-16 14:32:39
    安装 1、安装虚拟串口软件vspm 2、安装串口调试助手(用于连接com口)发送数据 设置: 3、启动vspm,设置为server模式,新建一个虚拟串口,如com3 ...(自己编写的程序不能和串口调试串口打开同一个串口

    安装
    1、安装虚拟串口软件vspm
    2、安装串口调试助手(用于连接com口)发送数据

    设置:
    3、启动vspm,设置为server模式,新建一个虚拟串口,如com3
    4、启动串口调试助手,连接到com3端口即可
    5、使用qextserialport串口库,自己编写程序打开com3口发送数据给vspm。(自己编写的程序不能和串口调试串口打开同一个串口)

    展开全文
  • QT串口编程源码 1
  • Qt 串口编程QSerialPortInfo 环境 Windows10 VS2019 Qt5.14.2 一、定义介绍   QSerialPortInfo,看它名字就知道是一个和串口有关的类,我们通过F12查看其文档,发现QSerialPortInfo就是一个qserialportInfo.h文件...

    Qt 串口编程QSerialPortInfo

    环境

    Windows10
    VS2019
    Qt5.14.2

    一、定义介绍

      QSerialPortInfo,看它名字就知道是一个和串口有关的类,我们通过F12查看其文档,发现QSerialPortInfo就是一个qserialportInfo.h文件(如下图)。
    在这里插入图片描述
      我们可以把鼠标光标移动到QSerialPortInfo,就可以看到qserialportInfo.h在文件夹中所处的位置。下图是qserialportInfo.h在文件夹中的位置。
    在这里插入图片描述

    二、功能作用

      QSerialPortInfo是一个类,这个类里面包含很多和串口有关的变量和方法,就是为了方便Qt程序员进行Qt开发。

    三、使用方法

    使用步骤:

    1.创建Qt工程
    2.在VS中添加Qt的串口模块(串口模块就包含了QSerialPortInfo等用于串口编程的类)
    项目——>属性
    在这里插入图片描述
    选择Qt Project Setting——>Qt Modules
    在这里插入图片描述

    勾选Serial Port
    在这里插入图片描述
    3.在文件中包含QSerialPortInfo

    #include <QSerialPortInfo>
    

    4.使用QSerialPortInfo

    来自:九七的Qt(转载请注明出处)

    展开全文
  • 用于学习QT平台开发串口通信的好例子,可以收发,可以记录收发字节个数
  • 线程+定时实现linux下的Qt串口编程
  • QT串口编程总结

    2021-09-23 14:26:51
    最近在使用QT5进行一些嵌入式系统及Linux平台上的开发,对于QT我是一个入门者,最近在使用QT5开发一个串口读取设备配置的功能中遇到了一些问题,后来虽然最终解决了,想到可能后来者也会在这方面遇到问题,所以写下...
  • Linux下基于QT串口编程测试二
  • Linux下基于QT串口编程测试一
  • Qt串口编程出错问题解决

    千次阅读 2012-09-03 21:00:09
    Qt串口编程出错问题解决方案  使用Qt在 Windows和Linux 下进行串口编程,整个教程笔者也是使用网上很流行的一片帖子:Qt编写串口通信程序全程图文讲解。这篇帖子访问量和转载量都很多,笔者也不清楚我给出的地址...
  • 仿照成品制作一个自己用Qt编写的串口助手。 1. 布局UI界面 创建QWidget工程,布局UI界面:拖入2个 Plain Text Edit,作为串口数据的接收显示和发送框。 拖入几个 Combo Box 、Label 和 Push Button,使用两个...
  • QT5入门之23 -QT串口编程 QT5有专门的串口类:QSerialPort:提供访问串口的功能QSerialPortInfo:提供系统中存在的串口的信息具体使用方法:1.在pro文件中加入: QT += serialport 2.mainwindow.h...
  • Windows Qt5平台实现的串口调试助手源码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,548
精华内容 1,819
关键字:

qt串口编程