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.rhkb.cn/news/84532.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据课程I1——Kafka的概述

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Kafka的概念&#xff1b; ⚪ 掌握Kafka的配置与启动&#xff1b; 一、简介 1. 基本概念 Apache kafka 是一个分布式数据流平台。可以从如下几个层面来理解&#x…

ngrok内网穿透可以实现资源共享吗?快解析更加简洁

随着互联网的高速发展&#xff0c;越来越多的人开始意识到内网穿透技术的重要性。在这一技术中&#xff0c;ngrok已经成为了一个备受关注的工具。然而&#xff0c;很多人对于ngrok是否可以进行资源共享存在疑问。本文将从新的角度出发&#xff0c;深入探讨这个问题。 了解什么…

TEC2083BS-PD码转换器(解决博世矩阵控制PELCO派尔高球机的问题)

TEC2083BS-PD码转换器 使用说明 1.设备概述 控制码转换器在安防工程中起着非常重要的角色&#xff0c;随着高速球型摄像机在安防工程中大范围的使用&#xff0c;而高速球厂家都因为某些原因很少使用博世、飞利浦的协议。为此&#xff0c;工程商经常会遇到博世协议和PELCO协议之…

【Linux】云服务器自动化部署VuePress博客(Jenkins)

前言 博主此前是将博客部署在 Github Pages&#xff08;基于 Github Action&#xff09;和 Vercel 上的&#xff0c;但是这两种部署方式对于国内用户很不友好&#xff0c;访问速度堪忧。因此将博客迁移到自己的云服务器上&#xff0c;并且基于 Jenkins&#xff08;一款开源持续…

eNSP:双向重定向和路由策略练习

实验要求&#xff1a; 拓扑图&#xff1a; IP、路由器 r1: <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 14.1.1.1 24 [r1-GigabitEthernet0/0/1]…

腾讯云轻量服务器和云服务器的CPU处理器有差别吗?

腾讯云轻量应用服务器和CVM云服务器的CPU处理器性能有差别吗&#xff1f;创建轻量应用服务器时不支持指定底层物理服务器的CPU型号&#xff0c;腾讯云将随机分配满足套餐规格的物理CPU型号&#xff0c;通常优先选择较新代次的CPU型号。而云服务器CVM的CPU处理器型号、主频都是有…

flutter开发实战-TextPainter计算文本内容的宽度

flutter开发实战-TextPainter计算文本内容的宽度 最近开发过程中根据Text文本的大小判断是否需要进行显示跑马灯效果&#xff0c;获取文本的大小&#xff0c;需要TextPainter来获取Size 一、TextPainter TextPainter主要用于实现文本的绘制。TextPainter类可以将TextSpan渲染…

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求&#xff1a; Docker要求Ce…

Java List(列表)

List 是一个有序、可重复的集合&#xff0c;集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素&#xff0c;可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引&#xff0c;第一个添加到 List 集合中的元素的索引为 0&#xff…

pytest接口自动化测试框架搭建的全过程

目录 一. 背景 二. 基础环境 三. 项目结构 四、框架解析 pytest是Python的一种单元测试框架,可用来组织用例执行,用例断言,下面这篇文章主要给大家介绍了关于pytest接口自动化测试框架搭建的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 一. 背景 Pyte…

HTTP协议

HTTP协议 应用层再谈 "协议"网络版计算器 HTTP协议认识URLurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header HTTPS协议HTTPS 是什么什么是"加密"为什么要加密常⻅的加密⽅式 HTTPS 的⼯作过程探究⽅案 1 - 只使⽤对称加密⽅案 2 - 只…

【Linux】TCP协议的相关实验——深入理解

TCP相关实验 理解CLOSE_WAIT状态 当客户端和服务器在进行TCP通信时&#xff0c;如果客户端调用close函数关闭对应的文件描述符&#xff0c;此时客户端底层操作系统就会向服务器发起FIN请求&#xff0c;服务器收到该请求后会对其进行ACK响应。 但如果当服务器收到客户端的FIN…

Apikit 自学日记:API 异常监控-监控报告

在 api 管理中&#xff0c;查看 api 异常监控的监控报告&#xff0c;在 apikit 中也是常用的功能&#xff0c;通常你可以在流程综合报告页中看到当前流程在选定时间段内的整体监控情况... 在 APIkit 中监控报告有这几种类别&#xff1a; 单接口监控报告 流程监控报告 项目监控…

linux静态库与动态库

1、动态库和静态库概念 Linux中的库分为动态库和静态库。 静态库&#xff08;.a&#xff09;&#xff1a;库文件以.a为后缀&#xff0c;程序在编译链接时把库的代码链接到可执行文件中&#xff08;将需要的库函数拷贝一份到代码中&#xff09;。程序运行时不需要再跳转到静态…

layui 集成 ztree异步加载

首先&#xff0c;layui环境搭建&#xff0c;ztree环境引入 ztree的js和css都要引入&#xff0c;我这里暂时用的是core包> 静态&#xff0c;一句话就够了 <!-- 左侧菜单树形组件 --><div class"layui-col-md3"><div class"layui-footer "…

计算机网络(7) --- UDP协议和TCP协议

计算机网络&#xff08;6&#xff09; --- https协议_哈里沃克的博客-CSDN博客https协议https://blog.csdn.net/m0_63488627/article/details/132112683?spm1001.2014.3001.5501 目录 1.补充知识 1.PORT端口号 2.端口号范围划分 3.知名端口号 2.UDP协议 1.UDP报头 2.U…

Tubi 前端测试:迁移 Enzyme 到 React Testing Library

前端技术发展迅速&#xff0c;即便不说是日新月异&#xff0c;每年也都推出新框架和新技术。Tubi 的产品前端代码仓库始建于 2015 年&#xff0c;至今 8 年有余。可喜的是&#xff0c;多年来紧随 React 社区的发展&#xff0c;Tubi 绝大多数的基础框架选型都遵循了社区流行的最…

Rust 原生支持龙架构指令集

导读近日&#xff0c;Rust 开源社区发布 1.71.0 版本&#xff0c;实现对龙架构&#xff08;LoongArch&#xff09;指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载 Rust 开源社区发布的龙架构二进制版本。Rust 开发者将在龙架构平台上获得…

Zabbix自动注册服务器及部署代理服务器

文章目录 一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用&#xff1a;2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 删除原来配置5.2 添加代理5.3 创建主机…

解决: git拉取报错 git 未能顺利结束 (退出码 1)

拉取代码失败信息 解决方法: 执行一下"git push -f origin master"命令即可 步骤: 1.项目文件夹右击选择"Git Bash Here",打开命令窗口 2. 输入"git push -f origin master"后,回画 执行结束 3.再拉取代码,成功