導航:首頁 > 編程語言 > qt串口自動掃描代碼

qt串口自動掃描代碼

發布時間:2024-12-07 13:47:11

❶ 用Qt編寫一個串口通訊程序

Qt軟體編程,windows下的Qt編程,實現功能串口通信,數據發送和接收。
根據協議編寫列印機串口通信程序。
新建一個Qt項目: 文件-新建文件或項目(ctrl+n)

單機 choose 之後

全部下一步到完成
成功建立一個Qt Widgets Application

新建一個管理SerialPort的類  右擊項目名字-添加新文件 彈出 如下框:

選擇C++ Class,單機 choose 彈出如下框: 並填寫 單機下一步 之後 單機完成

編寫SPComm類: 在SPComm.h中加入頭文件 #include QtSerialPort/QtSerialPort

在頭文件中 聲明串口功能: bool isOpen() const; void setPortName(const QString name); QString portName() const; void setBaudRate(int baudRate); int baudRate() const; virtual bool open(); virtual void close(); virtual bool clear(); int readData(char *buffer, int count, int timeout = 1000); int writeData(char *data, int size); int write(char ch); protected: QString m_portName; int m_baudRate; QSerialPort *m_serialPort;

在CPP文件中實現對應的功能: //這個函數用來設置波特率,打開串口的時候用到 static QSerialPort::BaudRate getBaudRate(int baudRate) { switch (baudRate) { case 1200: return QSerialPort::Baud1200; case 2400: return QSerialPort::Baud2400; case 4800: return QSerialPort::Baud4800; case 9600: return QSerialPort::Baud9600; case 19200: return QSerialPort::Baud19200; case 38400: return QSerialPort::Baud38400; case 57600: return QSerialPort::Baud57600; case 115200: return QSerialPort::Baud115200; default: return QSerialPort::UnknownBaud; } } //這個函數用來設置串口的名字 //window 下用"com1"  linux下用"/dev/ttyS0" void SPComm::setPortName(const QString name) { m_portName = name; } //用來獲取串口的名字 QString SPComm::portName() const { return m_portName; } //設置波特率 9600 19200 38400 void SPComm::setBaudRate(int baudRate) { m_baudRate = baudRate; } //用來打開串口,調用前,先設置串口名字和波特率 bool SPComm::open() { if (m_serialPort-isOpen()) { return true; } m_serialPort-setPortName(m_portName); m_serialPort-setBaudRate(getBaudRate(m_baudRate)); m_serialPort-setParity(QSerialPort::NoParity); m_serialPort-setDataBits(QSerialPort::Data8); m_serialPort-setStopBits(QSerialPort::OneStop); m_serialPort-setFlowControl(QSerialPort::NoFlowControl); m_serialPort-setReadBufferSize(1024); return m_serialPort-open(QSerialPort::ReadWrite); }
//用來關閉串口 void SPComm::close() { if (m_serialPort-isOpen()) { m_serialPort-close(); } }
//重啟串口,清楚數據 bool SPComm::clear() { if (m_serialPort-isOpen()) { m_serialPort-clear(); this-close(); return this-open(); } return false; }
//用來接收串口發來的數據 int SPComm::readData(char *buffer, int count, int timeout) { int len = 0; forever { int n = m_serialPort-read(buffer[len], count - len); if (n == -1) { return -1; } else if (n == 0 !m_serialPort-waitForReadyRead(timeout)) { return -2; } else { len += n; if (count == len) break; } } return len; }
//發送數據到串口 比如發送協議 int SPComm::writeData(char *data, int size) { int len = 0; forever { int n = m_serialPort-write(data[len], size - len); if (n == -1) { return -1; } else { len += n; if (size == len) break; } } return len; }
//別忘記了 //構造函數 添加初始化數據 SPComm::SPComm(QObject *parent) : QObject(parent) { m_serialPort = new QSerialPort(); m_baudRate = 9600; m_portName = ""; } //析構的時候 刪除 數據 SPComm::~SPComm() { delete m_serialPort; }
串口類編寫完成: 測試一下能否調用: 1.雙擊mainwindow.ui

切換到了設計模式: 2 拖入按鈕

3 雙擊按鈕,設置按鈕的名字

4設置好按鈕的名字為 打開串口 5右擊按鈕-轉到曹-選擇clicked()-點擊OK 跳轉到了 一下界面

為這個按鈕添加功能代碼: 首先在mainwindow.h中添加SPComm.h的頭文件

在mainwindow.h頭文件中,添加這行代碼SPComm *m_spcomm; private: Ui::MainWindow *ui; SPComm *m_spcomm;

在mainwindow.cpp的構造函數中 添加 m_spcomm = new SPComm(); 析構函數中 添加delete m_spcomm;

雙擊mainwindow.cpp 回到按鈕那裡添加功能 void MainWindow::on_pushButton_clicked() { if(m_spcomm-isOpen()) return; m_spcomm-setBaudRate(9600); m_spcomm-setPortName("com1"); if(m_spcomm-open()) qDebug() "打開串口成功"; }
同上關閉串口的代碼為 void MainWindow::on_pushButton_2_clicked() { if(m_spcomm-isOpen()) m_spcomm-close(); qDebug() "關閉串口成功"; }
點擊 按鈕 編譯 並且運行成

如果想編寫一個列印機串口程序 根據以上步驟 同理 添加一個Printer類 根據協議編發送指令,寫列印機的功能。 比如發送協議 進行 切紙 換行 列印數據

閱讀全文

與qt串口自動掃描代碼相關的資料

熱點內容
手機怎麼無法打開視頻文件夾 瀏覽:840
抖音如何上直播網站 瀏覽:887
錄屏截圖大師保存的文件在哪裡 瀏覽:751
紅河谷第二個版本 瀏覽:895
c語言如何讓整型數據的商為小數 瀏覽:863
怎樣下東西不要密碼 瀏覽:320
小米手機拍照後文件名要怎麼設置 瀏覽:429
每年程序員就業形勢 瀏覽:425
安卓手機如何卸載程序 瀏覽:955
相機能用qq不能用 瀏覽:319
win10如何設置成xp配置文件 瀏覽:748
蘋果隔空傳遞以後文件在哪裡 瀏覽:927
打開ps顯示文件名無效 瀏覽:379
做推廣哪個網站靠譜 瀏覽:588
qq飛車如何綁定好友 瀏覽:873
php編程語言在哪裡 瀏覽:302
矢量文件有哪些格式 瀏覽:790
文書檔案長期保存的文件有哪些 瀏覽:945
如何把pdf文字復制粘貼到word文檔 瀏覽:507
勤哲價格qinzheapp 瀏覽:709

友情鏈接