Linux MQTT智能家居項目(智能家居界面布局)

文章目錄

  • 前言
  • 一、創建工程項目
  • 二、界面布局準備工作
  • 三、正式界面布局
  • 總結


前言

一、創建工程項目

1.選擇工程名稱和項目保存路徑
在這里插入圖片描述
2.選擇QWidget

在這里插入圖片描述
3.添加保存圖片的資源文件:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在工程目錄下添加Icon文件夾保存圖片:
在這里插入圖片描述
將文件放入目錄中:
在這里插入圖片描述
將圖片添加進入資源文件中:
在這里插入圖片描述

二、界面布局準備工作

這里我們一共顯示4個界面:LED控制界面,溫度濕度顯示界面,光照強度顯示界面,攝像頭監測界面。

所以這里需要有4個QWidget來顯示對應的界面,考慮到要對這四個界面進行切換,這里會使用到QStackedLayout將四個界面進行管理。

同時需要添加四個按鍵,使用按鍵來切換到對應的界面。

首先添加4個界面文件:
在這里插入圖片描述
設置界面為Widget類型:
在這里插入圖片描述
在這里插入圖片描述

其他的三個界面也是如此添加。

界面布局我們需要使用到的文件:
在這里插入圖片描述

三、正式界面布局

代碼部分注釋寫的非常詳細了,這里就不多介紹了。

widget.h:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QStackedLayout>
#include "LEDCotrol.h"
#include "TempHumtiy.h"
#include "Illumination.h"
#include "Camera.h"class Widget : public QWidget
{Q_OBJECTQPushButton* LEDbutton;//LED按鍵QPushButton* TempHumtiybutton;//溫度濕度按鍵QPushButton* illuminationbutton;//光照強度按鍵QPushButton* Camerabutton;//攝像頭按鍵LEDCotrol* LEDUI;//LED界面TempHumtiy* TempHumtiyUI;//溫度濕度界面Illumination* illuminationUI;//光照強度界面Camera* CameraUI;//攝像頭界面QStackedLayout* m_stacklayout;//棧式布局管理器void BackSet(QString path);//背景圖設置void ButtonStyleSet(QPushButton* button, QString Buttonname);//按鍵樣式設置void AllButtonStyleSet();//全部按鍵樣式設置public:Widget(QWidget *parent = nullptr);~Widget();protected slots:void LEDButtonClick();//LED按鍵槽函數void TempHumtiyButtonClick();//溫度濕度槽函數void illuminationButtonClick();//光照強度槽函數void CameraButtonClick();//攝像頭槽函數void ConnectSlot(void);//連接信號與槽
};
#endif // WIDGET_H

widget.cpp:

#include "widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFrame>Widget::Widget(QWidget *parent): QWidget(parent)
{QVBoxLayout* vlayout = new QVBoxLayout();LEDbutton = new QPushButton();//LED按鍵TempHumtiybutton = new QPushButton();//溫度濕度按鍵illuminationbutton = new QPushButton();//光照強度按鍵Camerabutton = new QPushButton();//攝像頭按鍵/*讓四個按鍵垂直布局*/vlayout->addWidget(LEDbutton);vlayout->addWidget(TempHumtiybutton);vlayout->addWidget(illuminationbutton);vlayout->addWidget(Camerabutton);// 創建一個 label 作為豎直分隔線// 設置背景顏色或樣式,以使其看起來像一根線// 創建一條豎直分隔線QFrame* Vertical_line = new QFrame();Vertical_line->setFrameShape(QFrame::VLine);Vertical_line->setFrameShadow(QFrame::Sunken);Vertical_line->setStyleSheet("QFrame { background-color: rgb(71, 72, 86); }");LEDUI = new LEDCotrol();//LED界面TempHumtiyUI = new TempHumtiy();//溫度濕度界面illuminationUI = new Illumination();//光照強度界面CameraUI = new Camera();//攝像頭界面/*使用棧式布局管理器管理界面*/m_stacklayout = new QStackedLayout();m_stacklayout->addWidget(LEDUI);m_stacklayout->addWidget(TempHumtiyUI);m_stacklayout->addWidget(illuminationUI);m_stacklayout->addWidget(CameraUI);QHBoxLayout* hlaout = new QHBoxLayout(this);hlaout->addLayout(vlayout);hlaout->addWidget(Vertical_line);hlaout->addLayout(m_stacklayout);/*設置界面為固定大小*/setFixedSize(1024, 600);/*設置對應的背景圖*/BackSet(":/ICon/BackIcon.jpg");/*全部按鍵樣式設置*/AllButtonStyleSet();/*連接信號與槽*/ConnectSlot();
}/*連接信號與槽*/
void Widget::ConnectSlot(void)
{connect(LEDbutton, SIGNAL(clicked()), this, SLOT(LEDButtonClick()));connect(TempHumtiybutton, SIGNAL(clicked()), this, SLOT(TempHumtiyButtonClick()));connect(illuminationbutton, SIGNAL(clicked()), this, SLOT(illuminationButtonClick()));connect(Camerabutton, SIGNAL(clicked()), this, SLOT(CameraButtonClick()));
}/** 設置界面背景圖* path:資源文件路徑
*/
void Widget::BackSet(QString path)
{// 設置 QWidget 的背景圖QPixmap pixmap(path);QPalette palette;palette.setBrush(backgroundRole(), QBrush(pixmap));setPalette(palette);setAutoFillBackground(true);
}/** 設置按鍵樣式* button:要設置的按鍵* Buttonname:按鍵名字
*/
void Widget::ButtonStyleSet(QPushButton* button, QString Buttonname)
{button->setText(Buttonname);button->setFixedSize(150, 50);button->setStyleSheet("font-size: 16pt");button->setStyleSheet("background-color: rgb(94, 124, 166); font-size: 16pt; color: rgb(255, 255, 255);");
}/*全部按鍵樣式設置*/
void Widget::AllButtonStyleSet()
{ButtonStyleSet(LEDbutton, "燈光控制");ButtonStyleSet(TempHumtiybutton, "溫度濕度");ButtonStyleSet(illuminationbutton, "光照強度");ButtonStyleSet(Camerabutton, "遠程監控");
}//LED按鍵槽函數
void Widget::LEDButtonClick()
{m_stacklayout->setCurrentWidget(LEDUI);
}//溫度濕度槽函數
void Widget::TempHumtiyButtonClick()
{m_stacklayout->setCurrentWidget(TempHumtiyUI);
}//光照強度槽函數
void Widget::illuminationButtonClick()
{m_stacklayout->setCurrentWidget(illuminationUI);
}//攝像頭槽函數
void Widget::CameraButtonClick()
{m_stacklayout->setCurrentWidget(CameraUI);
}Widget::~Widget()
{
}

實現效果:
在這里插入圖片描述

總結

本篇文章就講解到這里,下篇文章我們完成LED,溫度濕度控制等界面的設計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40977.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40977.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40977.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡層協議

網絡層協議 IP協議基本概念協議頭格式網段劃分特殊的IP地址IP地址的數量限制私有IP地址和公網IP地址路由IP協議頭格式后續 在復雜的網絡環境中確定一個合適的路徑 IP協議 承接上文&#xff0c;TCP協議并不會直接將數據傳遞給對方&#xff0c;而是交付給下一層協議&#xff0c;…

機器學習基礎(四)

KNN算法 KNN:K-Nearest Neighbor,最近領規則分類。 為了判斷位置實例的類別,以所有已知類別的實例作為參照選擇參數K。計算未知實例與所有已知實例的距離。(一般采用歐氏距離)選擇最近K個已知實例。根據少數服從多數的投票法則,讓未知實例歸類為K個最近鄰樣本中最多數的類…

音視頻FAQ(三):音畫不同步

摘要 本文介紹了音畫不同步問題的五個因素&#xff1a;編碼和封裝階段、網絡傳輸階段、播放器中的處理階段、源內容產生的問題以及轉碼和編輯。針對這些因素&#xff0c;提出了相應的解決方案&#xff0c;如使用標準化工具、選擇強大的傳輸協議、自適應緩沖等。此外&#xff0…

uniapp微信小程序區分正式版,開發版,體驗版

小程序代碼區分是正式版&#xff0c;開發版&#xff0c;還是體驗版 通常正式和開發環境需要調用不同域名接口&#xff0c;發布時需要手動更換 或者有些東西不想在正式版顯示&#xff0c;只在開發版體驗版中顯示&#xff0c;也需要去手動隱藏 官方沒有明確給出判斷環境的方法&a…

SciencePub學術 | CCF推薦重點計算機SCIE征稿中

SciencePub學術 刊源推薦: CCF推薦重點計算機SCIE征稿中&#xff01;信息如下&#xff0c;錄滿為止&#xff1a; 一、期刊概況&#xff1a; CCF推薦重點SCIE簡介 【期刊簡介】IF&#xff1a;4.0&#xff0c;JCR2區&#xff0c;中科院3區&#xff1b; 【版面類型】正刊&#…

Swift 基礎

工程目錄 請點擊下面工程名稱&#xff0c;跳轉到代碼的倉庫頁面&#xff0c;將工程 下載下來 Demo Code 里有詳細的注釋 點擊下載代碼&#xff1a;swift-01

記錄一下基于jeecg-boot3.0的待辦消息移植記錄

因為之前沒有記錄&#xff0c;所以還要看代碼進行尋找&#xff0c;比較費勁&#xff0c;所以今天記錄一下&#xff1a; 1、后端 SysAnnouncementController 下面函數增加待辦的幾個顯示內容給前端用 具體代碼如下&#xff1a; /*** 功能&#xff1a;補充用戶數據&#xff0c…

由小波變換模極大值重建信號

給定信號&#xff0c; 令小波變換的尺度 則x(t)的二進小波變換為 令為取模極大值時的橫坐標&#xff0c;那么就是模極大值。 目標是由坐標、模極大值及最后一級的低頻分量重建信號x(t) 為了重建x(t)&#xff0c;假定有一信號集合h(t)&#xff0c;該集合中信號的小波變換和x(…

打印出二進制的奇數位和偶數位

void print(int a) {int i0;printf("奇數位&#xff1a;");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶數位&#xff1a;");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …

人臉圖像處理

1,人臉圖像與特征基礎 人臉圖像的特點 規律性: 人的兩只眼睛總是對稱分布在人臉的上半部分,鼻子和嘴唇中心點的連線基本與兩眼之間的連線垂直,嘴絕對不會超過眼鏡的兩端點(雙眼為d,則雙眼到嘴巴的垂直距離一般在0.8-1.25) 唯一性 非侵擾與便利性 可擴展性 人臉圖像的應用 身份…

Linux MQTT智能家居(溫度,濕度,環境監測,攝像頭等界面布局設置)

文章目錄 前言一、溫度濕度曲線布局二、環境監測界面布局三、攝像頭界面布局總結 前言 本篇文章來完成另外三個界面的布局設置。 這里會使用到 feiyangqingyun的一些控件庫。 一、溫度濕度曲線布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

pprof 三把刀

pprof 三把刀 看內存 go tool pprof http://127.0.0.1:6060/debug/pprof/heap?seconds30 看cpu go tool pprof http://127.0.0.1:6060/debug/pprof/profile?seconds30 看協程 go tool pprof http://localhost:6060/debug/pprof/goroutine 端口是自定義的&#xff0c;看看…

Golang原生實現JA3指紋修改,并支持Proxy代理

起因 抓取某個HTTPS網站的時候 開啟charles代理能夠抓取成功,關閉被風控 通過檢測,懷疑可能是tls的時候有區別 嘗試 golang的http中,Transport.TLSClientConfig是可以自定義設置的 但起初通過隨意設置并不能繞過風控 困難 使用golang的http客戶端,修改DialTLSContext函數的…

使用Python批量將Word文件轉為PDF文件

說明&#xff1a;在使用Minio服務器時&#xff0c;無法對word文件預覽&#xff0c;如果有需要的話&#xff0c;可以將word文件轉為pdf文件&#xff0c;再存儲到Minio中&#xff0c;本文介紹如何批量將word文件&#xff0c;轉為pdf格式的文件&#xff1b; 安裝庫 首先&#xff…

神經網絡基礎-神經網絡補充概念-12-向量化邏輯回歸的梯度輸出

代碼實現 import numpy as npdef sigmoid(z):return 1 / (1 np.exp(-z))def compute_loss(X, y, theta):m len(y)h sigmoid(X.dot(theta))loss (-1/m) * np.sum(y * np.log(h) (1 - y) * np.log(1 - h))return lossdef compute_gradient(X, y, theta):m len(y)h sigmoi…

Python系統學習1-9-類一之類語法

一、類之初印象 1、類就是空表格&#xff0c;將變量&#xff08;列名&#xff09;和函數&#xff08;行為&#xff09;結合起來 2、創建對象&#xff0c;表達具體行 3、創建類就是創建數據的模板 --操作數據時有提示 --還能再組合數據的行為 --結構更加清晰 4、類的內存分配…

vue項目根據word模版導出word文件

一、安裝依賴 //1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver npm install file-saver --save二、創建word模版 也就是編輯一個word文檔&#xff0c;文檔中需要動態取值的…

【JAVA】數組練習

? 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主頁&#xff1a;小胡_不糊涂的個人主頁 &#x1f4c0; 收錄專欄&#xff1a;淺談Java &#x1f496; 持續更文&#xff0c;關注博主少走彎路&#xff0c;謝謝大家支持 &#x1f496; 數組練習 1. 數組轉字符串2. 數組拷貝3.…

arm-linux-gnueabihf-g++ gcc編譯、優化命令 匯總

gcc優化選項&#xff0c;可在編譯時間&#xff0c;目標文件長度&#xff0c;執行效率三個維度&#xff0c;進行不同的取舍和平衡。 gcc 常用編譯選項 arm-linux-gnueabihf-g -O3 -marcharmv7-a -mcpucortex-a9 -ftree-vectorize -mfpuneon -mfpuvfpv3-fp16 -mfloat-abihard -…

js的FileSaver.saveAs()方法:監聽保存進度,進度條等方法

在使用FileSaver.saveAs保存表格到本地時&#xff0c;如果想要獲取導出/保存進度可以如下操作 FileSaver.js的saveAs()方法是一個異步操作&#xff0c;它將文件保存到用戶設備上。在調用saveAs()方法后&#xff0c;可以通過使用回調函數、Promise、或監聽相關事件來確定saveAs(…