色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術嵌入式Linux主板Qt串口應用程序簡介

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-17 09:41 ? 次閱讀

串口和其他設備一樣,在Linux系統中都是以設備文件的形式存在的,在英創公司提供的Linux主板配套光盤中,已經提供了基于C/C++ 的Linux標準串口操作例程,使用open函數來打開串口設備文件:'/dev/ttyS1',設置串口參數,創建一個單獨的線程來對數據進行收發,使用read函數讀取數據,write函數發送數據。并且英創公司將其封裝成一個serial類,可以使用serial類方便的操作英創工控主板的串口資源。

本文介紹如何在英創公司提供的Linux工控主板的串口例程Step2_serialtest的基礎上,加入了Qt顯示,實現在LCD顯示屏上控制串口通訊?;镜乃枷胧抢肣t的信號和插槽機制進行對象間的通訊,當串口接收的數據的時候,發出Signal,Qt 的顯示事件循環中接收到這個信號,調用定義好的Slot顯示串口的數據,如下圖:

串口和Qt顯示

先使用Qt Creator創建一個工程,加入英創公司提供的Linux工控主板串口例程中的serial.h和serial.cpp文件,因為要在Step2_serialtest例程的基礎上加入Qt顯示單元,所以我們需要讓英創公司封裝好的serial類繼承QObject類的屬性,使QObject成為serial類的基類,然后在serial類中加入一個signal,讓serial類和Qt顯示通過信號和插槽的機制連接。但是對于串口的操作部分并不用做修改。

QObject類是所有Qt對象的基類并且是Qt對象模型的中心。這個模型的中心特征就是一種用于無縫對象通訊的被叫做信號和槽的非常強大的機制。只有繼承了 QObject 類的類,才具有信號和槽的能力。所以,為了使用信號和槽,必須繼承 QObject。凡是 QObject 類(不管是直接子類還是間接子類),都應該在第一行代碼寫上 Q_OBJECT。不管是不是使用信號和槽,都應該添加這個宏。這個宏的展開將為我們的類提供信號和槽機制、國際化機制以及 Qt 提供的不基于 C++ RTTI 的反射能力。所以在serial.h中作如下修改:

class CSerial: public QObject //繼承QObject
{
Q_OBJECT
signals:
void readyRead(QString);
};

在serial.cpp中,串口數據接收線程檢測到有數據可讀時,添加發送信號的語句,提示顯示對象有數據可以顯示,并把數據發送給顯示對象:

emit pSer->readyRead(pSer->DatBuf);

對串口程序的修改已經完成,在工程中加入Qt設計師界面,根據需要設計顯示界面,本例程中的界面如下:

設計的界面

可以看到,在界面中添加了三個按鈕,分別為“打開串口”,“關閉串口”和“清除數據”,兩個組合框,用來選擇串口的端口號和比特率,一個文本瀏覽器用來顯示串口接收的數據。在工程中加入窗口顯示程序:widget.h和 widget.cpp,首先要對顯示界面進行初始化,實現代碼如下:

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //顯示界面的初始化
setActionsEnabled(true); //使能組件
setComboBoxEnabled(true);
}

定義接收串口發送信號的插槽,在窗口的文本瀏覽器中顯示串口接收的數據:

void Widget::readMyCom(QString buf)
{
//將串口的數據顯示在窗口的文本瀏覽器中
ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
}

將串口發送的Signal和顯示窗口類中Slot連接起來,以便響應:

QObject::connect(myCom,SIGNAL(readyRead(QString)),this,SLOT(readMyCom(QString)),Qt::QueuedConnection);

這里需要特別說明一點,由于串口例程會打開一個線程對數據進行處理,所以這里發送Signal的是串口處理數據的線程,而接收Signal是在顯示的線程中,所以他們的連接方式需要采用Qt::QueuedConnection,這樣使用跨線程的Signal和Slot連接,Signal發送以后,會等到控制權返回到接收者線程的事件循環后才調用槽,就是說槽在接收者的線程中被執行,如果采用其他方式連接,顯示可能就會出現各種錯誤。

如果在顯示界面中添加了一些其他功能組件,比如按鈕等,可以在這里編寫組件的事件響應函數,實現想要的功能,在本例程中,添加了一些組合框和按鈕,用來選擇串口的端口號和波特率,并且打開或者關閉串口,部分實現代碼如下:

void Widget::on_openpushButton_clicked() //打開按鈕
{
qint8 i;
portno=ui->portNamecomboBox->currentText(); //讀取端口號
ba = portno.toLatin1();
m_portno=ba.data(); //轉換為字符串
ba.clear();
baudRate=ui->baudRatecomboBox->currentText(); //讀取波特率
m_baudRate=baudRate.toInt(); //轉換為整形
myCom=new CSerial;
i=myCom ->OpenPort( m_portno, m_baudRate, '8', '1', 'N' ); //打開串口
if(i<0)
{
QMessageBox::information(this, tr('打開失敗'), tr('打開串口失敗') , QMessageBox::Ok); //打開失敗彈出提示框
delete myCom;
myCom = NULL;
return;
}

void Widget::on_closeopenpushButton_clicked() //關閉按鈕
{
myCom->ClosePort(); //關閉串口
delete myCom;
myCom = NULL;
setComboBoxEnabled(true);
ui->closeopenpushButton->setEnabled(false);
}

最后在工程中添加main.cpp,在main函數中,主要是對字體進行設置,并且顯示我們設計的窗口:

int main( int argc,char* argv[] )
{
QApplication a(argc, argv);
QFont font('simsun',11,QFont::Bold); //設置字體
a.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName('utf8'));
Widget w;
w.showFullScreen(); //顯示窗口
return a.exec();
}

運行程序,例程的效果如下:

程序運行效果

可以通過顯示界面選擇開啟哪一路串口,設置波特率,顯示接收到的數據。本例程只是簡單的把Step2_serialtest和Qt的顯示連接起來,將串口收到的數據顯示在Qt的界面中,并且進行回發,客戶的使用方法還是和以前的Step2_serialtest一樣只是增加了顯示界面。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209328
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35295
收藏 人收藏

    評論

    相關推薦

    嵌入式工程師都在找的【Linux內核調試技術】建議收藏!

    嵌入式系統的開發中,Linux內核調試是一個至關重要的環節。 隨著處理器技術的不斷進步和嵌入式領域的蓬勃發展,掌握有效的內核調試技術成為
    發表于 11-28 15:37

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備中執行專門任務。嵌入式
    的頭像 發表于 09-30 10:05 ?449次閱讀

    七大嵌入式GUI盤點

    提供商業技術支持,同時也繼續提供開源版本。MiniGUI為嵌入式Linux系統提供了完整的多進程支持;可以MiniGUI-Processes、MiniGUI-Threads或者
    發表于 09-02 10:58

    嵌入式linux開發的基本步驟有哪些?

    嵌入式Linux開發是一個復雜的過程,涉及到硬件選擇、操作系統移植、驅動開發、應用程序開發等多個方面。以下是嵌入式Linux開發的基本步驟,
    的頭像 發表于 09-02 09:11 ?479次閱讀

    嵌入式linux開發板怎么操作

    嵌入式Linux開發板是一種基于Linux操作系統的嵌入式系統開發平臺。它通常包括一個處理器、內存、存儲器、輸入/輸出接口等硬件組件,以及一個基于L
    的頭像 發表于 09-02 09:09 ?372次閱讀

    嵌入式linux開發板芯片的工作原理

    嵌入式Linux開發板是一種基于Linux操作系統的嵌入式系統開發平臺,它廣泛應用于工業控制、智能家居、智能交通、醫療設備等領域。 嵌入式
    的頭像 發表于 09-02 09:07 ?374次閱讀

    C28x嵌入式應用程序二進制接口

    電子發燒友網站提供《C28x嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-31 09:39 ?0次下載
    C28x<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>二進制接口

    MSP430嵌入式應用程序二進制接口

    電子發燒友網站提供《MSP430嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-30 11:43 ?0次下載
    MSP430<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>二進制接口

    C6000嵌入式應用程序二進制接口

    電子發燒友網站提供《C6000嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-29 14:52 ?0次下載
    C6000<b class='flag-5'>嵌入式</b><b class='flag-5'>應用程序</b>二進制接口

    嵌入式QT常見開發方式有哪些?

    ,嵌入式工程師可以使用同一套代碼庫開發適用于不同嵌入式操作系統(如Linux、RTOS)的應用程序,只需針對目標平臺調整編譯選項和配置即可。 6.
    發表于 08-12 10:05

    嵌入式系統中集成Rust和Qt的實踐

    Rust 擁有豐富的庫生態系統,用于序列化和反序列化、異步操作、解析不安全輸入、線程、靜態分析等,而 Qt 是一個 C++ 工具包,支持跨各種平臺的豐富的、基于 GUI 的應用程序,從 iOS 到嵌入式
    發表于 05-03 10:26 ?1785次閱讀
    在<b class='flag-5'>嵌入式</b>系統中集成Rust和<b class='flag-5'>Qt</b>的實踐

    Linux是做什么用的?

    流行,因為它穩定、安全且可靠。許多大型互聯網公司和數據中心都使用Linux作為服務器操作系統,用于托管網站、數據庫、應用程序等。 2、嵌入式系統:Linux可以被
    發表于 04-28 15:40

    嵌入式主板,你了解多少?

    嵌入式主板,也稱為嵌入式計算機主板,是一種專門設計用于嵌入式系統的計算機主板。與臺式機和筆記本電腦中使用的常規
    的頭像 發表于 04-17 15:11 ?1444次閱讀

    定制嵌入式主板,需要考慮的功能有哪些?

    隨著科技的不斷發展和進步,嵌入式系統在各行各業中得到了廣泛的應用。嵌入式主板作為嵌入式系統的核心組件,起著至關重要的作用。在定制嵌入式
    的頭像 發表于 02-29 17:38 ?516次閱讀
    定制<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>,需要考慮的功能有哪些?

    嵌入式人工智能的就業方向有哪些?

    操作系統使用及C高級編程 數據結構與算法 二:嵌入式Linux應用工程師,Linux網絡開發工程師 文件IO 并發程序設計 項目實戰:基于Linux
    發表于 02-26 10:17
    主站蜘蛛池模板: 男女牲交大战免费播放| 欧美精品一卡二卡| 青娱国产区在线| 亚洲黄色片免费看| 99国产在线观看| 国产精品久久婷婷五月色 | 成人天堂婷婷青青视频在线观看| 国产精品一区二区三区四区五区| 久久亚洲AV成人无码动态图| 色综合久久综合网观看| 中文无码热在线视频| 国产不卡一卡2卡三卡4卡网站| 久久是热这里只有精品| 色欲国产麻豆精品AV免费| 中文字幕一区二区三区在线不卡 | yellow在线观看免费高清的日本 | 免费精品美女久久久久久久久 | 成人在线观看播放| 久久免费看少妇级毛片蜜臀| 色欲AV色欲AV久久麻豆| 88.7在线收听| 韩剧甜性涩爱| 四虎国产精品免费观看视频 | 俄罗斯兽交XXXXX在线| 巨污全肉np一女多男| 天天槽任我槽免费| JAPANBABES11学生老师| 久久精品动漫99精品动漫| 无码国产精品高潮久久9| 97无码欧美熟妇人妻蜜| 娇小老少配xxxxx| 天天摸夜添狠狠添高| 精品久久久久亚洲| 天堂岛www天堂资源在线| 99热只有精品| 久久人妻无码毛片A片麻豆| 无码人妻精品一区二区蜜桃在线看 | 亚洲va久久久久| 公和我做好爽添厨房中文字幕| 免费亚洲视频| 洲精品无码高潮喷水A片|