QT桌面项目(第一个应用程序 桌面壁纸软件)

2024-01-13 00:30

本文主要是介绍QT桌面项目(第一个应用程序 桌面壁纸软件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、壁纸切换程序的布局
  • 二、添加资源文件
  • 三、代码编写
  • 四、主界面代码
  • 五、程序的编写思路
  • 六、程序效果
  • 总结


前言

上节课我们已经做好了APP的按键图标了,这篇文章就让我们来开始制作第一个桌面程序吧。

一、壁纸切换程序的布局

这个是windows上浏览器查看图片的界面,看起来是非常的简单明了的,在旁边有两个前进和后退的按键用来控制图片的更换,中间是用来显示图片的部分,这个部分我们使用一个QWidget来显示即可。
背景颜色可以使用QQ的截图查看RGB,当然了也可以根据自己的喜好来设置。
在这里插入图片描述

二、添加资源文件

首先要将背景图添加到资源文件当中:

在这里插入图片描述

在这里插入图片描述

三、代码编写

创建一个类来管理壁纸界面,这个类继承于QWidget:

BcakGround.h:

#ifndef BACKGROUND_H
#define BACKGROUND_H#include <QObject>
#include <QWidget>
#include <QPushButton>
#include <QMouseEvent>
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>class BackGround : public QWidget
{Q_OBJECTQPushButton m_backbtn;/*向后按键*/QPushButton m_aheadbtn;/*向前按键*/QWidget p_dis;/*显示图片界面*/QStringList PngList;/*存放所有图片的路径*/int NowImageIndex;/*当前显示图片的下标*/QString m_ImagePath;/*当前图片相对路径*/QMenu* m_menu;/*菜单栏*/QAction* m_action;void GetImageName();/*得到文件夹下的全部文件相对路径并存放入链表当中保存*/void ShowImage(QString path);/*在当前选择界面显示对应图片*/void MenuInit();/*菜单栏初始化*/public:explicit BackGround(QWidget *parent = nullptr);QString GetNowImagePath();/*提供给外部使用,得到选择的图片绝对路径*/signals:void updateBackGround();/*更新背景图片信号*/
protected:void contextMenuEvent(QContextMenuEvent *event);protected slots:void m_backbtn_clicked();void m_aheadbtn_clicked();void SetNowImagePath();
};#endif // BACKGROUND_H

BcakGround.c:

#include "BackGround.h"
#include <QIcon>
#include <QDebug>
#include <QHBoxLayout>
#include <Qpalette>
#include <QDir>BackGround::BackGround(QWidget *parent): QWidget{parent}, m_backbtn(this),m_aheadbtn(this), p_dis(this)
{setFixedSize(1024, 600);NowImageIndex = 0;/*设置背景颜色*/setAutoFillBackground(true);QPalette palette1;palette1.setColor(QPalette::Window, QColor(43, 43, 43));setPalette(palette1);// 设置 QWidget 的背景图QPixmap pixmap(":/BackGround/Desktop2 (1).jpg");QPalette palette;palette.setBrush(backgroundRole(), QBrush(pixmap));p_dis.setPalette(palette);p_dis.setAutoFillBackground(true);/*按键样式设置*/m_backbtn.setIcon(QIcon(":/Back.png"));m_backbtn.setStyleSheet("QPushButton { border-radius: 25px; min-width: 50px; min-height: 50px; ""border: 0px solid black; }");m_backbtn.setFixedSize(50, 50);m_backbtn.setIconSize(m_backbtn.size());m_aheadbtn.setIcon(QIcon(":/ahead.png"));m_aheadbtn.setStyleSheet("QPushButton { border-radius: 25px; min-width: 50px; min-height: 50px; ""border: 0px solid black; }");m_aheadbtn.setFixedSize(50, 50);m_aheadbtn.setIconSize(m_aheadbtn.size());/*界面布局*/QHBoxLayout* layout = new QHBoxLayout(this);layout->addWidget(&m_backbtn);layout->addWidget(&p_dis);layout->addWidget(&m_aheadbtn);GetImageName();MenuInit();connect(&m_backbtn, SIGNAL(clicked()), this, SLOT(m_backbtn_clicked()));connect(&m_aheadbtn, SIGNAL(clicked()), this, SLOT(m_aheadbtn_clicked()));
}/*获得背景图的文件名*/
void BackGround::GetImageName()
{QDir dir("D:/QT project/wallpaper/BackGround");if (!dir.exists()) {qDebug() << "this dir is unexists";}dir.setFilter(QDir::Files | QDir::NoSymLinks);PngList = dir.entryList();
}/*根据选择的文件名显示对应的图片*/
void BackGround::ShowImage(QString path)
{QPixmap pixmap(QString(":/BackGround/") + path);QPalette palette;palette.setBrush(backgroundRole(), QBrush(pixmap));p_dis.setPalette(palette);p_dis.setAutoFillBackground(true);
}void BackGround::m_backbtn_clicked()
{if(NowImageIndex > 0){NowImageIndex--;}ShowImage(PngList[NowImageIndex]);
}void BackGround::m_aheadbtn_clicked()
{if(NowImageIndex < PngList.count() - 1){NowImageIndex++;}ShowImage(PngList[NowImageIndex]);
}void BackGround::MenuInit()
{m_menu = new QMenu(this);m_action = new QAction();m_action->setText("设置为背景图");m_menu->addAction(m_action);connect(m_action, SIGNAL(triggered()), this, SLOT(SetNowImagePath()));
}/*得到背景图路径*/
void BackGround::SetNowImagePath()
{m_ImagePath = PngList[NowImageIndex];emit updateBackGround();
}/*获取背景图绝对路径*/
QString BackGround::GetNowImagePath()
{/*得到绝对路径*/QString abspath = QString(":/BackGround/") + m_ImagePath;return abspath;
}/*重写contextMenuEvent捕获鼠标右键事件生成菜单栏*/
void BackGround::contextMenuEvent(QContextMenuEvent *event)
{m_menu->exec(QCursor::pos());event->accept();
}

四、主界面代码

这里我们需要编写一个SetNowBackGround槽函数来接收updateBackGround信号,当接收到这个信号时更新界面。

void Widget::SetNowBackGround()
{QPixmap pixmap(bg->GetNowImagePath());QPalette palette;palette.setBrush(backgroundRole(), QBrush(pixmap));setPalette(palette);setAutoFillBackground(true);
}

五、程序的编写思路

代码注释已经非常详细了,这里我就主要给大家讲解一下主要的思路。

1.使用水平布局管理器布局整个界面

2.使用QDir得到图片的路径并保存到QStringList中

3.重写contextMenuEvent函数,当鼠标右键按下时出现一个菜单栏,并连接菜单栏中的QAction的triggered信号到自定义的SetNowImagePath槽函数中

4.当菜单栏中的QAction被按下时发送updateBackGround信号告诉主界面应该更新背景图了

5.主界面中定义对应的槽函数更新界面

六、程序效果

这个壁纸软件我们还可以把他做的更好,我们可以添加查找框,查找一些我们想要的背景图,或者添加一些图片的分类让我们可以直接进行选择,这些就留给大家去完善了。
在这里插入图片描述

总结

本篇文章就讲解到这里了,下面我们将持续完善我们的QT桌面程序。

这篇关于QT桌面项目(第一个应用程序 桌面壁纸软件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599675

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2