Qt串口調試助手
如果大家以前搞過單片機,那么對串口調試助手一定不陌生。各種助手可以方便我們做一些測試、定位一些問題。今天和大家分享一下用Qt開發的跨平臺串口調試助手。
先來一張效果圖:
其他串口調試助手:
程序的主體構成:
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 下為程序設置桌面圖標:
具體方法可參見之前的文章。
UI布局效果:
程序無需修改,可直接在Windows與ubuntu下直接運行。
歡迎大家關注公眾號:
如果覺得有幫助可以點個在看,讓更多初學Qt的小伙伴得到幫助~
智能推薦
QT實現串口調試助手(六):頁面布局
工程源碼:https://github.com/zhangfls/QT_UartAnalysisTool 上一篇: INI文件存取串口信息 之前沒有設置頁面布局,當窗口進行放大縮小時,組件的位置還是保持原樣,這樣很不實用。所以要調整一下頁面和組件布局 QT幾種常見的布局: 下面就用這些布局調整一下組件的位置排布。 1、添加horizontalLayout水平布局,將頁面...
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 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...