• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Qt串口調試助手

    如果大家以前搞過單片機,那么對串口調試助手一定不陌生。各種助手可以方便我們做一些測試、定位一些問題。今天和大家分享一下用Qt開發的跨平臺串口調試助手。

    先來一張效果圖:

    640?wx_fmt=png

    其他串口調試助手:

    640?wx_fmt=png

    程序的主體構成:

    PortSettings          類封裝了串口的名稱、波特率、數據位、校驗位、

                          停止位和流控等一系列屬性;

    CommunicationThread   類在線程中接收和發送數據,防止數據量大的時候

                          阻塞主UI線程。

    SerialPortMainWindow   UI類,設置串口通信屬性、數據收發屬性等。

    重點說幾個函數:

     

    ①主UI中打開串口

    void SerialPortMainWindow::on_pbn_openSerialport_clicked()	
    {	
        updatePortSettings();	
    
    	
        if(!m_serialportStatus)	
        {	
            m_communicationThread = new CommunicationThread;	
    
    	
          connect(m_communicationThread,SIGNAL(signal_serialportStatus(bool)),	
                    this,SLOT(slot_serialportStatus(bool)));	
    
    	
            connect(m_communicationThread,SIGNAL(signal_recvData(QByteArray)),	
                    this,SLOT(slot_recvData(QByteArray)));	
    
    	
            m_communicationThread->setSerialportParam(m_portSetting);	
    
    	
            if(!m_communicationThread->isRunning())	
            {	
                m_communicationThread->start();	
            }	
        }	
        else	
        {	
            m_serialportStatus = false;	
            m_communicationThread->stopThread();	
            delete m_communicationThread;	
            m_communicationThread = NULL;	
    
    	
            QIcon buttonIcon(":/myresources/Resources/led/open.png");	
            ui->pbn_openSerialport->setIcon(buttonIcon);	
            ui->pbn_openSerialport->setIconSize(QSize(130,40));	
        }	
    }

    打開/關閉串口,如果串口是關閉狀態,則打開串口,反之則關閉串口。注意這里面沒有檢查是否有可用串口。如果有可用串口,則創建新的串口通信實例,建立相關信號和槽。

    串口打開成功顯示綠色的燈,是通過給按鈕添加圖標來實現的。

        這里提一下,Ascii與Hex的轉換需要通過一個封裝的函數實現。

     

    ②通信線程中的處理

    void CommunicationThread::run()	
    {	
        m_serialPort = new QSerialPort;	
    
    	
        bool ret = m_serialPort->open(QIODevice::ReadWrite);	
        emit signal_serialportStatus(ret);	
    
    	
        while(!m_quitThread && ret)	
        {	
            QByteArray readData = m_serialPort->readAll();	
            while (m_serialPort->waitForReadyRead(5))	
                readData += m_serialPort->readAll();	
    
    	
            if(!readData.isEmpty())	
            {	
                emit signal_recvData(readData);	
            }	
    
    	
            if(!m_sendDataQueue.isEmpty())	
            {	
                m_serialPort->write(m_sendDataQueue.dequeue());	
            }	
        }	
    }

    在run()中實例化m_serialPort,繼承QThread重新實現run()函數,只有run()中的部分運行在線程中。主UI中如果要發送數據,則先讓數據進入m_sendDataQueue隊列中,m_serialPort再將隊列中數據發送出去。使用readAll()讀取數據,通過信號將數據發送出去。

    Qt中線程間通訊可以使用信號和槽、隊列等通訊方式。

     

    Windows下為程序設置圖標:

    pro中添加  RC_FILE = Resources/serialIcon.rc

    serialIcon.rc 中的內容: 

         IDI_ICON1  ICON DISCARDABLE  "icon/serialPortAssistant.ico"

     

     

        Ubuntu 下為程序設置桌面圖標:

    具體方法可參見之前的文章。

    640?wx_fmt=png

    UI布局效果:

    640?wx_fmt=png

    程序無需修改,可直接在Windows與ubuntu下直接運行。

    歡迎大家關注公眾號:

        如果覺得有幫助可以點個在看,讓更多初學Qt的小伙伴得到幫助~

    640?wx_fmt=png

    版權聲明:本文為ACK_ACK原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/ACK_ACK/article/details/102674901

    智能推薦

    QT實現串口調試助手(六):頁面布局

    工程源碼:https://github.com/zhangfls/QT_UartAnalysisTool   上一篇: INI文件存取串口信息   之前沒有設置頁面布局,當窗口進行放大縮小時,組件的位置還是保持原樣,這樣很不實用。所以要調整一下頁面和組件布局 QT幾種常見的布局: 下面就用這些布局調整一下組件的位置排布。 1、添加horizontalLayout水平布局,將頁面...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    精品国产乱码久久久久久蜜桃不卡