亚洲综合色在线观看一区二区,久久国产免费福利永久,亚洲码欧洲码一二三四五区别,亚洲欧洲日本在线视频

      • <track id="ifu2x"><input id="ifu2x"><progress id="ifu2x"></progress></input></track>

        上位機(jī)軟件開發(fā)教程qt(qt上位機(jī)軟件設(shè)計(jì))

        軟件開發(fā) 4485
        今天給各位分享上位機(jī)軟件開發(fā)教程qt的知識(shí),其中也會(huì)對(duì)qt上位機(jī)軟件設(shè)計(jì)進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、正點(diǎn)原子linux開發(fā)板怎么調(diào)試

        今天給各位分享上位機(jī)軟件開發(fā)教程qt的知識(shí),其中也會(huì)對(duì)qt上位機(jī)軟件設(shè)計(jì)進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!

        本文目錄一覽:

        正點(diǎn)原子linux開發(fā)板怎么調(diào)試

        ui

        正點(diǎn)原子Linux開發(fā)板——Qt串口上位機(jī)實(shí)驗(yàn)

        門牙會(huì)稍息

        原創(chuàng)

        關(guān)注

        3點(diǎn)贊·53人閱讀

        前言:

        最近在學(xué)習(xí)嵌入式qt開發(fā),然后跟著教程編寫了一個(gè)簡(jiǎn)單的串口上位機(jī)程序,在編寫的時(shí)候還算比較順利,但在調(diào)試的時(shí)候花了點(diǎn)功夫,折騰了一下午。最后還是理清了思路,解決了問題,特寫此博客進(jìn)行記錄和總結(jié)。

        串口上位機(jī)界面設(shè)計(jì):

        整個(gè)軟件的界面我都是用ui來設(shè)計(jì)的,其實(shí)也可以用代碼,但是想了想有好多布局相互嵌套比較麻煩。最后就使用了ui界面來設(shè)計(jì)。

        ui界面設(shè)計(jì)

        串口上位機(jī)程序功能設(shè)計(jì):

        然后像串口對(duì)象初始化,槽函數(shù),一些邏輯關(guān)系都用代碼來實(shí)現(xiàn),頭文件就只有一些變量、槽的定義。

        頭文件

        #include "widget.h"

        #include "ui_widget.h"

        #include QMessageBox

        Widget::Widget(QWidget *parent)

        : QWidget(parent)

        , ui(new Ui::Widget)

        {

        ui-setupUi(this);

        //lcd屏的分辨率是1024X600

        this-setFixedSize(QSize(1024, 600));

        //new 一個(gè)QSerialPort對(duì)象

        serialPort = new QSerialPort(this);

        //通過foreach語(yǔ)句將windows或imx6ull可用串口識(shí)別出來,并添加至對(duì)應(yīng)的下拉選擇框

        QStringList serialList;

        foreach(const QSerialPortInfo info, QSerialPortInfo::availablePorts()){

        serialList += info.portName();

        }

        ui-comboBox-addItems(serialList);

        //設(shè)置串口的信號(hào)與槽

        connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));

        }

        Widget::~Widget()

        {

        delete ui;

        }

        void Widget::on_radioButton_clicked(bool checked)

        {

        //點(diǎn)擊“打卡串口”button之后的一些串口配置操作,和一些邏輯關(guān)系

        if(checked){

        //設(shè)置串口端

        serialPort-setPortName(ui-comboBox-currentText());

        //設(shè)置波特率

        serialPort-setBaudRate(ui-comboBox_2-currentText().toInt());

        //設(shè)置停止位

        serialPort-setStopBits(QSerialPort::StopBits(ui-comboBox_4-currentText().toInt()));

        //設(shè)置數(shù)據(jù)位

        serialPort-setDataBits(QSerialPort::DataBits(ui-comboBox_6-currentText().toInt()));

        //設(shè)置校驗(yàn)位

        switch(ui-comboBox_5-currentIndex()){

        case 0:

        serialPort-setParity(QSerialPort::Parity::NoParity);

        break;

        case 1:

        serialPort-setParity(QSerialPort::Parity::EvenParity);

        break;

        case 2:

        serialPort-setParity(QSerialPort::Parity::OddParity);

        break;

        case 3:

        serialPort-setParity(QSerialPort::Parity::SpaceParity);

        break;

        case 4:

        serialPort-setParity(QSerialPort::Parity::MarkParity);

        break;

        default:

        break;

        }

        serialPort-setFlowControl(QSerialPort::NoFlowControl);

        if(!serialPort-open(QSerialPort::ReadWrite)){

        QMessageBox::about(this, "串口打開錯(cuò)誤提示", "可能被占用了");

        return;

        }

        //打開串口之后其他的選擇按鈕設(shè)置成不可用

        ui-comboBox-setEnabled(false);

        ui-comboBox_2-setEnabled(false);

        ui-comboBox_4-setEnabled(false);

        ui-comboBox_5-setEnabled(false);

        ui-comboBox_6-setEnabled(false);

        ui-radioButton-setText("關(guān)閉串口");

        }

        else{

        serialPort-close();

        ui-comboBox-setEnabled(true);

        ui-comboBox_2-setEnabled(true);

        ui-comboBox_4-setEnabled(true);

        ui-comboBox_5-setEnabled(true);

        ui-comboBox_6-setEnabled(true);

        ui-radioButton-setText("打開串口");

        }

        }

        void Widget::readData()

        {

        //將串口中的數(shù)據(jù)打印到textBrowser中

        ui-textBrowser-insertPlainText(serialPort-readAll());

        }

        void Widget::on_pushButton_clicked()

        {

        //點(diǎn)擊“發(fā)送”button之后,將textEdit中的內(nèi)容寫入串口

        serialPort-write(ui-textEdit-toPlainText().toUtf8());

        }

        void Widget::on_pushButton_2_clicked()

        {

        //清屏操作

        ui-textEdit-clear();

        ui-textBrowser-clear();

        }

        登錄后復(fù)制

        在windows端編寫好程序之后,將工程文件發(fā)送到ubuntu進(jìn)行qmake、make最后通過scp將ARM的可執(zhí)行文件發(fā)送到開發(fā)板,接下來就是驗(yàn)證了

        我用的是正點(diǎn)原子出廠的系統(tǒng),所以在驗(yàn)證的時(shí)候需要使用到一個(gè)串口來連接到開發(fā)板執(zhí)行編寫好的上位機(jī)程序,所以一個(gè)串口就被占用了,正點(diǎn)原子教程視頻就用開發(fā)板的另一個(gè)串口來進(jìn)行測(cè)試

        正點(diǎn)原子教程測(cè)試方式

        因?yàn)榉偶倩亓思?,我也沒有帶太多的東西,usb轉(zhuǎn)ttl模塊放在了學(xué)校。所以我在想怎么就用一個(gè)串口來完成實(shí)驗(yàn)。困擾我的就是唯一的一個(gè)串口必須留個(gè)上位機(jī),然后要怎么執(zhí)行開發(fā)板上的串口上位機(jī)程序?最初我想到了可以使用網(wǎng)絡(luò)通過Xshell遠(yuǎn)程連接到開發(fā)板就可以執(zhí)行,唯一的串口就拿來驗(yàn)證。

        解決完上位機(jī)軟件怎么在imx6ull上執(zhí)行的問題,接下來就是驗(yàn)證了。驗(yàn)證的時(shí)候又出現(xiàn)了一些問題,上位機(jī)軟件不像想象的那樣一邊發(fā)數(shù)據(jù),一邊就接收對(duì)應(yīng)的數(shù)據(jù),而出現(xiàn)了一些imx6ull的信息,好像還可以輸入命令,感到非常奇怪。

        我以為我的軟件有問題,就在windows上換了一個(gè)串口軟件,結(jié)果還是出現(xiàn)了類似的情況

        最后也是在不斷猜想和測(cè)試之后找到了原因,就是應(yīng)因?yàn)槲以诮o開發(fā)板上電的時(shí)候接入了串口線,然后先打開了windows上的串口,然后就使用到了串口,導(dǎo)致就相當(dāng)于有一個(gè)串口控制imx6ull開發(fā)板,像Xshell中通過串口連接開發(fā)板一樣。然后我嘗試在windows的上位機(jī)軟件輸入命令想打開一個(gè)qt程序,最后也是成功打開證實(shí)了猜想

        執(zhí)行./list命令打開了蛇姐list程序(qt程序的路徑是/home/root/qt_project/list)

        如果想要實(shí)現(xiàn)實(shí)驗(yàn)最初windows和imx6ull兩個(gè)上位機(jī)互換數(shù)據(jù)的效果的話。要先通過windows中的上位機(jī)軟件輸入命令來打開imx6ull的上位機(jī)軟件,這樣相當(dāng)于windows中的上位機(jī)連接的就是imx6ull的上位機(jī)了,而不是直接控制imx6ull了,之后就可以正常收發(fā)數(shù)據(jù)了。

        總結(jié):

        學(xué)了qt快半個(gè)月了,這個(gè)串口上位機(jī)算是一個(gè)比較綜合的練習(xí)了,結(jié)合了ui和代碼設(shè)計(jì)。加上最后的調(diào)試也是收獲頗多,如果有usb-ttl模塊的話驗(yàn)證步驟就會(huì)更簡(jiǎn)單。

        怎么學(xué)Qt,我的終極目標(biāo)是用Qt編寫一個(gè)上位機(jī)界面就行了,有沒有高手指點(diǎn)下,怎么學(xué),用什么書容易上手?

        不知道 上位機(jī)界面 是什么東東. 我講講我學(xué)Qt, 我安裝編譯完庫(kù)之后, 庫(kù)里會(huì)有很多demo例子. 把那些例子跑跑, 瀏覽下我關(guān)心的功能的源代碼. 然后自己想想自己需要的功能大概要用到哪些組件. 把那幾個(gè)相關(guān)的例子和相關(guān)組件的文檔仔細(xì)的看看, 就差不多可以寫出來了.

        假如你基礎(chǔ)還不錯(cuò)的話, 可以參考下.

        qt stm32上位機(jī)串口通信

        1、首先,新建一個(gè)Qt項(xiàng)目:文件--新建文件。

        2、然后,點(diǎn)擊--?choose。

        3、再然后,全部下一步到完成。

        4、成功建立一個(gè)Qt:Widgets Application。

        5、然后,新建一個(gè)管理SerialPort的類:右擊項(xiàng)目名字--添加新文件--彈出。

        6、選擇C++ Class。點(diǎn)擊:choose--彈出如下框: 并填寫--點(diǎn)擊下一步---點(diǎn)擊完成。

        上位機(jī)軟件開發(fā)教程qt的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于qt上位機(jī)軟件設(shè)計(jì)、上位機(jī)軟件開發(fā)教程qt的信息別忘了在本站進(jìn)行查找喔。

        掃碼二維碼