Linux MQTT智能家居項目(LED界面的布局設置)

文章目錄

  • 前言
  • 一、LED界面布局準備工作
  • 二、LED界面布局
  • 三、邏輯實現
  • 總結


前言

上篇文章我們完成了主界面的布局設置那么這篇文章我們就來完成各個界面的布局設置吧。

一、LED界面布局準備工作

首先添加LED燈光控制的圖標。
在這里插入圖片描述
將選擇好的LED圖標添加進來:
在這里插入圖片描述
圖標可以在阿里的矢量圖中找到:
地址:阿里巴巴矢量圖庫
將圖片下載到后即可添加進入工程文件中。
在這里插入圖片描述

二、LED界面布局

在QT設計師界面我們完成這樣的一個布局:
在這里插入圖片描述
首先我們需要添加LED的圖標和將LED的按鍵邊框隱藏:

隱藏邊框:
在這里插入圖片描述
設置按鍵樣式表:
在這里插入圖片描述
樣式表中的代碼:

border-radius: 50px;

設置字體大小:
在這里插入圖片描述
添加一些滑動條:
在這里插入圖片描述
更改對應按鍵和滑動條的對象名:
在這里插入圖片描述
在這里插入圖片描述

界面運行效果:
在這里插入圖片描述

三、邏輯實現

這里在QT設計師界面跳轉到槽函數:
在這里插入圖片描述
對應按鍵的槽函數:

邏輯實現:
我們這個按鍵是用來控制LED燈開關的,所以這里的邏輯是按下按鍵LED圖標變滅,然后再次按下按鍵LED燈圖標變亮。

我們還能通過滑動條來改變LED燈的狀態,所以這里需要使用到滑動條的槽函數:
在這里插入圖片描述
代碼實現:
LEDCotrol.h:

#ifndef LEDCOTROL_H
#define LEDCOTROL_H#include <QWidget>
#include <QPushButton>namespace Ui {
class LEDCotrol;
}class LEDCotrol : public QWidget
{Q_OBJECT/*各個LED狀態變量*/bool led1status;bool led2status;bool led3status;bool led4status;void AllLEDInit();//LED狀態初始化void LEDStatusSet(QPushButton* button, QString path);//LED狀態設置函數public:explicit LEDCotrol(QWidget *parent = nullptr);~LEDCotrol();private slots:void on_LED1_clicked();void on_LED2_clicked();void on_LED4_clicked();void on_LED3_clicked();void on_horizontalSlider_valueChanged(int value);void on_horizontalSlider_3_valueChanged(int value);void on_horizontalSlider_4_valueChanged(int value);void on_horizontalSlider_2_valueChanged(int value);private:Ui::LEDCotrol *ui;
};#endif // LEDCOTROL_H

LEDCotrol.cpp:

#include "LEDCotrol.h"
#include "ui_LEDCotrol.h"
#include <QIcon>
#include <QPixmap>
#include <QDebug>LEDCotrol::LEDCotrol(QWidget *parent) :QWidget(parent),ui(new Ui::LEDCotrol)
{ui->setupUi(this);/*全部LED初始化*/AllLEDInit();
}/*全部LED初始化*/
void LEDCotrol::AllLEDInit()
{/*LED狀態初始化*/led1status = true;led2status = true;led3status = true;led4status = true;/*LED1*/QPixmap pixmap(":/ICon/LEDOFF.png");  // 加載背景圖像QIcon icon(pixmap.scaled(QSize(127, 150), Qt::KeepAspectRatio));  // 設置圖像大小與按鈕相同,并保持縱橫比ui->LED1->setIcon(icon);//關閉LEDui->LED1->setIconSize(QSize(127, 150));  // 設置圖標的大小與按鈕相同/*LED2*/ui->LED2->setIcon(icon);//關閉LEDui->LED2->setIconSize(QSize(127, 150));  // 設置圖標的大小與按鈕相同/*LED3*/ui->LED3->setIcon(icon);//關閉LEDui->LED3->setIconSize(QSize(127, 150));  // 設置圖標的大小與按鈕相同/*LED4*/ui->LED4->setIcon(icon);//關閉LEDui->LED4->setIconSize(QSize(127, 150));  // 設置圖標的大小與按鈕相同
}/** 設置一個LED的狀態* button:要設置的LED按鍵* path:圖片路徑
*/
void LEDCotrol::LEDStatusSet(QPushButton* button, QString path)
{QPixmap pixmap(path);  // 加載背景圖像QIcon icon(pixmap.scaled(QSize(127, 150), Qt::KeepAspectRatio));  // 設置圖像大小與按鈕相同,并保持縱橫比button->setIcon(icon);//關閉LEDbutton->setIconSize(QSize(127, 150));  // 設置圖標的大小與按鈕相同
}/*LED1按鍵槽函數*/
void LEDCotrol::on_LED1_clicked()
{led1status = !led1status;if(led1status){LEDStatusSet(ui->LED1, ":/ICon/LEDOFF.png");ui->horizontalSlider->setValue(0);}else{LEDStatusSet(ui->LED1, ":/ICon/LEDON.png");ui->horizontalSlider->setValue(100);}
}/*LED2按鍵槽函數*/
void LEDCotrol::on_LED2_clicked()
{led2status = !led2status;if(led2status){LEDStatusSet(ui->LED2, ":/ICon/LEDOFF.png");ui->horizontalSlider_2->setValue(0);}else{LEDStatusSet(ui->LED2, ":/ICon/LEDON.png");ui->horizontalSlider_2->setValue(100);}
}/*LED4按鍵槽函數*/
void LEDCotrol::on_LED4_clicked()
{led3status = !led3status;if(led3status){LEDStatusSet(ui->LED4, ":/ICon/LEDOFF.png");ui->horizontalSlider_4->setValue(0);}else{LEDStatusSet(ui->LED4, ":/ICon/LEDON.png");ui->horizontalSlider_4->setValue(100);}
}/*LED3按鍵槽函數*/
void LEDCotrol::on_LED3_clicked()
{led4status = !led4status;if(led4status){LEDStatusSet(ui->LED3, ":/ICon/LEDOFF.png");ui->horizontalSlider_3->setValue(0);}else{LEDStatusSet(ui->LED3, ":/ICon/LEDON.png");ui->horizontalSlider_3->setValue(100);}
}LEDCotrol::~LEDCotrol()
{delete ui;
}/*滑塊1槽函數:控制LED1*/
void LEDCotrol::on_horizontalSlider_valueChanged(int value)
{if(value == 0){led1status = true;LEDStatusSet(ui->LED1, ":/ICon/LEDOFF.png");}else if(value == 99){led1status = false;LEDStatusSet(ui->LED1, ":/ICon/LEDON.png");}
}/*滑塊3槽函數:控制LED3*/
void LEDCotrol::on_horizontalSlider_3_valueChanged(int value)
{if(value == 0){led3status = true;LEDStatusSet(ui->LED3, ":/ICon/LEDOFF.png");}else if(value == 99){led3status = false;LEDStatusSet(ui->LED3, ":/ICon/LEDON.png");}
}/*滑塊4槽函數:控制LED4*/
void LEDCotrol::on_horizontalSlider_4_valueChanged(int value)
{if(value == 0){led4status = true;LEDStatusSet(ui->LED4, ":/ICon/LEDOFF.png");}else if(value == 99){led4status = false;LEDStatusSet(ui->LED4, ":/ICon/LEDON.png");}
}/*滑塊2槽函數:控制LED2*/
void LEDCotrol::on_horizontalSlider_2_valueChanged(int value)
{if(value == 0){led2status = true;LEDStatusSet(ui->LED2, ":/ICon/LEDOFF.png");}else if(value == 99){led2status = false;LEDStatusSet(ui->LED2, ":/ICon/LEDON.png");}
}

完成滑動條和LED狀態的同步。
在這里插入圖片描述

總結

本篇文章就講解到這里,下篇文章將完成其他的界面布局和功能。

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

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

相關文章

drawio導出矢量圖

1.選中要導出的圖 2.導出為pdf 3.用adobe打開pdf&#xff0c;另存為eps

華為認證含金量如何

華為認證是指通過華為技術有限公司官方認證考試所獲得的認證資格。華為認證主要分為三個級別&#xff1a;華為認證工程師&#xff08;HCIE&#xff09;、華為認證專家&#xff08;HCNP&#xff09;和華為認證技術專家&#xff08;HCNA&#xff09;&#xff0c;每個級別都有不同…

在測試環境進行sqlserver鎖表測試

將某表設置X鎖1分鐘&#xff1a; begin tran select top 1 * from tableName with (tablockx) waitfor delay 00:01:00 commit tran 查詢當前被鎖的表&#xff1a; --查詢鎖表的事務ID&#xff0c;被鎖表名&#xff0c;鎖模式&#xff0c;客戶端主機名&#xff0c;客戶端程序…

你真的了解數據結構與算法嗎?

數據結構與算法&#xff0c;是理論和實踐必須緊密結合的一門學科&#xff0c;有關數據結構和算法同類的課程或書籍&#xff0c;有些只是名為“數據結構”&#xff0c;而非“數據結構與算法”&#xff0c;它們在內容上并無很大區別。 實際上&#xff0c;數據結構和算法&#xf…

【華為認證 Datacom 練習題(有答案喲)】

1&#xff08;單選題&#xff09;下列配置默認路由的命令中&#xff0c;正確的是&#xff08;&#xff09;。 A、 B、 C、 D、 正確答案A 2&#xff08;單選題&#xff09;UDP是面向無連接的&#xff0c;必須使用&#xff08;&#xff09;來提供傳輸的可靠性。 A、網絡層…

深入源碼分析kubernetes informer機制(零)簡單了解informer

[閱讀指南] 基于kubernetes 1.27 stage版本 為了方便閱讀&#xff0c;后續所有代碼均省略了錯誤處理及與關注邏輯無關的部分。 文章目錄 關于client-goInformer是什么為什么需要informerInformer工作流程后續分析計劃 關于client-go client-go是kubernetes節點與服務端進行資源…

揭秘熱門工作秘籍:ChatGPT大顯身手!輕松提升工作效率的高效Prompt技巧曝光!

目錄 01 背景 福利&#xff1a;文末有chat-gpt純分享&#xff0c;無魔法&#xff0c;無限制 02 AI 可以幫助程序員做什么&#xff1f; 2.1 技術知識總結 2.2 拆解任務 2.3 閱讀代碼/優化代碼 2.4 代碼生成 2.5 生成單測 2.6 更多 AI 應用/插件 AIPRM Voice Control for Ch…

2023企業微信0day漏洞復現以及處理意見

2023企業微信0day漏洞復現以及處理意見 一、 漏洞概述二、 影響版本三、 漏洞復現小龍POC檢測腳本: 四、 整改意見 免責聲明&#xff1a;請勿利用文章內的相關技術從事非法測試&#xff0c;由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損失&#x…

論文閱讀:《Waymo Public Road Safety Performance Data》

文章目錄 1 背景2 方法2.1 數據來源2.2 碰撞數據 3 碰撞事件分析4 討論 1 背景 這篇文章是講waymo道路安全性能數據分析的&#xff0c;主要想表達的是waymo自動駕駛系統在安全上面的出色表現&#xff0c;以向政府、大眾提高自己產品的公信力。 這篇文章分析的數據是自從2019年到…

Django圖書商城系統實戰開發 - 實現會員管理

Django圖書商城系統實戰開發 - 實現會員管理 在Django圖書商城系統中&#xff0c;會員管理是一個重要的功能模塊。該模塊包括會員信息的展示、編輯和刪除等功能。以下是實現會員管理功能的詳細步驟和代碼示例。 步驟一&#xff1a;設計數據庫模型 首先&#xff0c;我們需要設…

Transactional注解的方法中數據庫和redis的回滾問題

問題背景&#xff1a;如果某個方法加了Transactional注解&#xff0c;而這個方法中既包括mysql事務又包括redis事務&#xff0c;那么如何做到mysql和redis都回滾&#xff1f; mysql事務支持回滾&#xff0c;但redis的事務是不支持回滾的&#xff0c;但它倆都在當前方法的事務里…

MySQL高階知識點(一)事務的并發問題和隔離級別

簡單來說&#xff0c;事務就是要保證一組數據庫操作&#xff0c;要么全部成功&#xff0c;要么全部失敗。 在 MySQL 中&#xff0c;事務支持是在引擎層實現的。 MySQL 是一個支持多引擎的系統&#xff0c;但并不是所有的引擎都支持事務。 如 MySQL 原生的 MyISAM 引擎就不支持…

MBR400100CT-ASEMI肖特基模塊MBR400100CT

編輯&#xff1a;ll MBR400100CT-ASEMI肖特基模塊MBR400100CT 型號&#xff1a;MBR400100CT 品牌&#xff1a;ASEMI 封裝&#xff1a;M2 正向電流&#xff1a;400A 反向電壓&#xff1a;100V 引線數量&#xff1a;2 芯片個數&#xff1a;2 芯片尺寸&#xff1a;102MIL…

Django 初級指南:創建你的第一個 Django 項目

Django 是一個強大的 Python Web 框架&#xff0c;它采用了“模型-視圖-控制器”&#xff08;MVC&#xff09;的設計模式&#xff0c;能夠幫助開發者快速、簡潔地創建高質量的 Web 應用。這篇文章將引導你創建你的第一個 Django 項目。 一、安裝 Django 首先&#xff0c;你需…

OpenCV-Python中的圖像處理-霍夫變換

OpenCV-Python中的圖像處理-霍夫變換 霍夫變換霍夫直線變換霍夫圓環變換 霍夫變換 霍夫(Hough)變換在檢測各種形狀的技術中非常流行&#xff0c;如果要檢測的形狀可以用數學表達式描述&#xff0c;就可以是使用霍夫變換檢測它。即使要檢測的形狀存在一點破壞或者扭曲也是可以使…

【1day】復現大華智慧園區綜合管理平臺SQL注入漏洞

目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現 一、漏洞描述 大華智慧園區綜合管理平臺是一個集智能化、信息化、網絡化、安全化為一體的智慧園區管理平臺,旨在為園區提供一站式解決方案,包括安防、能源管理、環境監測、人員管理、停車管理等多個方面。大華…

【C/C++】關于C++構造函數成員初始化

文章目錄 1. 第一種方式2. 第二種方式3. 優劣 1. 第一種方式 成員初始化列表。在構造函數的參數列表后使用冒號分割的一組初始化語句。 class my_class { public:my_class(int a, int b): m_x(a), m_y(b) {/*....*/} private:int m_x;int m_y; };2. 第二種方式 在構造函數內…

【skynet】skynet 服務間通信

寫在前面 skynet 服務之間有自己的一套高效通信 API 。本文給出簡單的示例。 文章目錄 寫在前面準備工作編寫代碼運行結果 準備工作 首先要有一個編譯好&#xff0c;而且工作正常的 skynet 。 編寫代碼 在 skynet/example 目錄編寫一個配置文件&#xff0c;兩個代碼文件。 …

(7)(7.1) 使用航點和事件規劃任務

文章目錄 前言 7.1.1 設置Home位置 7.1.2 視頻&#xff1a;制作并保存多路點任務 7.1.3 視頻&#xff1a;加載已保存的多航點任務 7.1.4 使用說明 7.1.5 提示 7.1.6 自動網格 7.1.7 任務指令 7.1.8 任務結束 7.1.9 任務重置 7.1.10 MIS_OPTIONS 7.1.11 任務再出發 …

renderdoc源碼分析(四) 重放

//TODO 先貼下飛書文檔&#xff0c;后續找時間再整理到這 Docs