亚洲人成中文电影|超级碰碰人妻中文字幕|亚洲国产精品无码二区|国产日韩久久久久无码精品|国产精品美女一级在线观看|亚洲欧美日韩综合二区三区|久久久久久亚洲AV无码专区|亚洲精品无码MV在线观看网站

上位機軟件開發(fā)教程qt(上位機軟件編程)

軟件開發(fā) 3596
本篇文章給大家談?wù)勆衔粰C軟件開發(fā)教程qt,以及上位機軟件編程對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、

本篇文章給大家談?wù)勆衔粰C軟件開發(fā)教程qt,以及上位機軟件編程對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

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

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

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

qt stm32上位機串口通信

1、首先,新建一個Qt項目:文件--新建文件。

2、然后,點擊--?choose。

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

4、成功建立一個Qt:Widgets Application。

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

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

想學(xué)習(xí)QT,用在機電設(shè)備方面的上位機,比如運動控制卡、圖像采集卡等的編程,給點建議吧,謝謝!

個人感覺QT的執(zhí)行效率不是特別高,如果用在上位機,對實時性要求比較高的場合還是不推薦使用的,一般采用qt都是因為可視化比較好,但是工程上一般要求控制品質(zhì)和精度,光有外表華麗是不行的。

如果要學(xué)習(xí)qt,如果有一些MFC開發(fā)經(jīng)驗?zāi)蔷秃苋菀兹胧?,畢竟這種集成化開發(fā)環(huán)境都是大同小異的。如果沒有經(jīng)驗,那么就從頭學(xué)起吧,最好找一些有樣例的教材,一步一步的學(xué)習(xí),千萬別著急,要腳踏實地,一步一步就可以實現(xiàn)你的夢想了!

上位機開發(fā)

就目前就業(yè)市場來看,不管上位機,還是下位機,應(yīng)用程序領(lǐng)域的人才需求總是最大的。

做測試軟件其實不一定需要用 c#,假如你對c/c++開發(fā)比較熟,那直接用 MFC 等寫些

對話框應(yīng)用就好了,測試軟件不至于會太復(fù)雜。另外假如 c/c++ 通了,C#之類的不要

太簡單。

對于做工作來說的話,除非你已經(jīng)走在自己已經(jīng)認(rèn)準(zhǔn)的那條道上了。否則你還是兵來將

擋,水來土掩的好。任何時候,有任何需要,你憑借自己的基礎(chǔ)稍做學(xué)習(xí)都能立馬上手。

還有一點,不是說你今天或者這幾個月做了 c# ,后面幾年時間你就必須得用它來吃飯了。

做c#的過程也許只是你長期職業(yè)追求中的一個插曲而已,對于增加知識面也有好處。

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

ui

正點原子Linux開發(fā)板——Qt串口上位機實驗

門牙會稍息

原創(chuàng)

關(guān)注

3點贊·53人閱讀

前言:

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

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

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

ui界面設(shè)計

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

然后像串口對象初始化,槽函數(shù),一些邏輯關(guān)系都用代碼來實現(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 一個QSerialPort對象

serialPort = new QSerialPort(this);

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

QStringList serialList;

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

serialList += info.portName();

}

ui-comboBox-addItems(serialList);

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

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

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_radioButton_clicked(bool checked)

{

//點擊“打卡串口”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è)置校驗位

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, "串口打開錯誤提示", "可能被占用了");

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()

{

//點擊“發(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進行qmake、make最后通過scp將ARM的可執(zhí)行文件發(fā)送到開發(fā)板,接下來就是驗證了

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

正點原子教程測試方式

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

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

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

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

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

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

總結(jié):

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

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

掃碼二維碼