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

简介: 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_OBJECT
    QPushButton* 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,温度湿度控制等界面的设计。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
83 1
Linux系统之Centos7安装cockpit图形管理界面
|
28天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
238 3
|
1月前
|
存储 数据可视化 Java
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
如何在Linux系统下部署和运行Java项目jar包,包括传输文件到Linux、使用nohup命令运行jar包、查看端口状态、杀死进程和查看项目运行状态,以及如何解决“没有主清单属性”的错误。
461 1
震惊!如何在linux下部署项目,部署/运行jar包 超详细保姆级教程!
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
294 3
|
1月前
|
算法 Java Linux
java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
39 1
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
331 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
消息中间件 Linux
linux之centos安装rabbitmq
linux之centos安装rabbitmq
|
3月前
|
消息中间件 Unix Linux
在Linux中,RabbitMQ是什么?
在Linux中,RabbitMQ是什么?
|
3月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
下一篇
无影云桌面