中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Qt下怎么控制硬件

發布時間:2021-11-30 09:14:23 來源:億速云 閱讀:572 作者:iii 欄目:互聯網科技

這篇文章主要介紹“在Qt下怎么控制硬件”,在日常操作中,相信很多人在在Qt下怎么控制硬件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”在Qt下怎么控制硬件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!


我們可以使用 C 和 C++進行混合編程,我們先來看一個控制蜂鳴器的 APP 代碼,這里以終結者 I.MX6ULL為例,iTOP-4412 可參考測例程代碼,代碼如下:
#include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" #define BEEPOFF 0
#define BEEPON 1
/*
* @description : main 主程序
* @param - argc : argv 數組元素個數
* @param - argv : 具體參數
* @return : 0 成功;其他 失敗
*/
int main(int argc, char *argv[])
{
int fd, retvalue;
char *filename;
unsigned char databuf[1];
if(argc != 3){
printf("Error Usage!\r\n");
return -1;
}
filename = argv[1];
/* 打開 beep 驅動 */
fd = open(filename, O_RDWR);
if(fd < 0){
printf("file %s open failed!\r\n", argv[1]);
return -1;
}
databuf[0] = atoi(argv[2]); /* 要執行的操作:打開或關閉 */
/* 向/dev/beep 文件寫入數據 */
retvalue = write(fd, databuf, sizeof(databuf));
if(retvalue < 0){
printf("BEEP Control Failed!\r\n");
close(fd);
return -1;
}
retvalue = close(fd); /* 關閉文件 */
if(retvalue < 0){
printf("file %s close failed!\r\n", argv[1]);
return -1;
}
return 0;
}
通過上面的代碼我們可以發現,使用 C 語言來控制一個蜂鳴器,無非就是打開設備節點,然后通過 write來寫入數據就可以控制蜂鳴器了。既然我們可以使用 C 和 C++混合編程,那么我們是不是只需要把這個 C控制蜂鳴器的代碼直接加到 QT 程序里面就可以了,那我們我們要怎么進行混合編程呢?
我們先新建一個 QT 工程,然后添加倆個按鈕來控制蜂鳴器的打開和關閉,UI 界面如圖 62.4.1:
在Qt下怎么控制硬件
然后我們開始移植代碼,因為 C++是面向對象的,C 是面向過程的,所以在 QT 上,我們要用面向對象的思想來進行編程,所以我們第一步,就是要先創建一個類,把 C 語音控制蜂鳴器的代碼封裝成一個類。
我們右鍵選中這個工程,然后選擇添加新文件,添加 C++ Class 如圖 62.4.2:
在Qt下怎么控制硬件
然后我們添加類的名字,因為我們操作的是蜂鳴器,所以我們這里寫成 Beep,如圖 62.4.3:
在Qt下怎么控制硬件
第一步,我們把 C 語言控制蜂鳴器代碼的頭文件,添加到我們剛才添加 Beep 類生成的文件 beep.h 里面,但是頭文件我們不能直接復制過去,我們要用 extern “C”{}括起來,代碼如下:
extern "C"{
#include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" }
添加完成如圖 62.4.4 所示:
在Qt下怎么控制硬件
圖 62.4.4
第二步,把我們 C 語言控制蜂鳴器里面的參數定義復制到 public 下面,代碼如下:
int fd, retvalue;
char *filename;
unsigned char databuf[1];
添加完如圖 62.4.5 所示:
在Qt下怎么控制硬件
然后我們打開 beep.cpp,把 C 語言控制蜂鳴器里面的打開設備節點的代碼復制到構造函數里面,注意,QT 里面我們不能使用 printf,代碼如下:
/* 打開 beep 驅動 */
fd = open(filename, O_RDWR);
if(fd < 0){
return ;
}
添加完如圖 62.4.6 所示:
在Qt下怎么控制硬件
圖 62.4.6
然后我們創建一個打開蜂鳴器和一個關閉蜂鳴器的函數,第一步,現在 beep.h 里面聲明,然后在
beep.cpp 里面實現。
聲明:
代碼如下:
void Beep_On();
void Beep_Off();
添加完如圖 62.4.7 所示:
在Qt下怎么控制硬件
圖 62.4.7
實現:
代碼如下,注意 c 語言函數前面要加::,表示這個函數是 C 函數。
void Beep::Beep_On()
{
/* 向/dev/beep 文件寫入數據 */
databuf[0] = 1;
retvalue = ::write(fd, databuf, sizeof(databuf));
if(retvalue < 0){
::close(fd);
return ;
}
}
void Beep::Beep_Off()
{
databuf[0] = 0;
retvalue = ::write(fd, databuf, sizeof(databuf));
if(retvalue < 0){
::close(fd);
return ;
}
}
添加完如圖 62.4.8 所示:
在Qt下怎么控制硬件
圖 62.4.8
添加好了之后,我們直接使用這個類就可以了,我們先在 widget 里面新建一個 beep,
然后我們在構造函數里面新建一個對象,如圖 62.4.9 所示:
在Qt下怎么控制硬件
圖 62.4.9
然后我們在槽函數里面執行對應的打開和關閉動作即可,如圖 62.4.10 所示:
在Qt下怎么控制硬件

到此,關于“在Qt下怎么控制硬件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

锡林浩特市| 什邡市| 临朐县| 江西省| 临海市| 宝山区| 甘泉县| 萨嘎县| 葫芦岛市| 关岭| 西充县| 广宗县| 太康县| 玛曲县| 宁河县| 鹰潭市| 电白县| 红原县| 会理县| 榆中县| 鹤岗市| 玉龙| 博客| 新平| 新宾| 沙湾县| 陇西县| 黄陵县| 剑川县| 衡东县| 鄂尔多斯市| 双鸭山市| 台南市| 柞水县| 阳谷县| 吉安县| 惠安县| 宜兰县| 马鞍山市| 瑞丽市| 益阳市|