# 无边框背景透明窗体
#### 设置属性
~~~C++
this->setWindowFlags(Qt::FramelessWindowHint); //去掉标题栏
this->setAttribute(Qt::WA_TranslucentBackground); //设置背景透明
~~~
#### 设置窗体 png
在主 `Widget` 上拖一个 `Widge` 控件,然后设置 Widget 的窗体,以 **qss** 的形式设置窗体的背景图
~~~C++
ui->widget->setStyleSheet(QString("background-image:url(:/src/action1/%1.png);").arg(1));
~~~
因为要设置动态图,所以用一个定时器循环设置窗体的背景图
#### 定时器
~~~C++
/*动态人物*/
QTimer* frameTimer;
frameTimer = new QTimer;
connect(frameTimer,SIGNAL(timeout()),this, SLOT(frame_refreshTime()));
frameTimer->start(500);
~~~
定时器循环设置窗体背景图
~~~C++
void Widget::frame_refreshTime()
{
static int frame = 1;
frame = frame%4 + 1;
//qDebug()<<"frame:"<<frame;
if(status==0) {
ui->widget->setStyleSheet(QString("background-image:url(:/src/action1/%1.png);").arg(frame));
}
else if(status==1){
ui->widget->setStyleSheet(QString("background-image:url(:/src/action2/%1.png);").arg(frame));
}
else {
ui->widget->setStyleSheet(QString("background-image:url(:/src/action3/%1.png);").arg(frame));
}
}
~~~
这里 **status** 是人物状态,0 喜,1 怒,2 哀
`这样一个不规则窗体就设置完成了,加上小姐姐动态图组,nice`
## Setting 设计
项目-> 右键->Add New-> 选择 Qt-> 选择 Qt Desiger Form-> 选择 Widget
UI 是这样设计的
![](https://www.writebug.com/myres/static/uploads/2022/5/21/6b6a0c289e06bbe7d5d19fcc974a2787.writebug)
这个**设置样式表**,直接 copy 我的就行
#### 人物状态选项
这个直接绑定信号与槽,让主界面和 setting 界面进行数据传递
Setting 界面定义信号,check 按钮之后发送信号
~~~C++
signals:
//定义status发送信号,widget槽函数收收
void status_check_index(int index);
~~~
~~~C++
void Setting::slot_RadioButton_checket(int ButtonId)
{
//发送status信号
emit status_check_index(ButtonId);
}
~~~
Widget 绑定信号
~~~C++
/*应用菜单*/
Setting* setting;
setting = new Setting;
//绑定设置的status信号
connect(setting,SIGNAL(status_check_index(int)),this,SLOT(Setting_status_change(int)));
~~~
这样就完成了两个窗体的交互
## 设置桌面壁纸
简单来说就是找到桌面 Program Manager,给桌面发送 0x52c 消息,让它接触父子关系,然和将自己写好的窗口和它建立父子关系 `SetParent`
#### 获取桌面句柄
这里直接封装阿几个函数,然后调用,具体看源码
~~~C++
SendMessageToDesktop(); //发送消息,解除父子关系
this->desktopWnd=findDesktopIconWnd(); //获取桌面句柄
~~~
#### 建立父子关系
这里以单独的背景图片为例,没有数字时钟的
~~~C++
void Setting::on_select_pushButton_clicked()
{
srcLabel->setParent(bkWidget);
srcLabel->setGeometry(0,0,1920,1080);
srcLabel->setScaledContents(true); //是否缩放
srcPath =QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("选择文件"),"",
QString::fromLocal8Bit("媒体文件( *.gif *.jpg *.png)"));
if(srcPath != "" && (srcPath.contains(".jpg")||srcPath.contains(".png")))//jpg,png
{
srcLabel->setPixmap(QPixmap(srcPath));
if(desktopWnd) //设置父窗体为桌面
{
SetParent((HWND)bkWidget->winId(), desktopWnd);
qDebug()<<"over";
}
bkWidget->setWindowFlags(Qt::FramelessWindowHint); //无边框
bkWidget->showFullScreen(); //全屏
qDebug()<<"success";
return;
}
~~~
因为要显示图片。所以给 bkWidget 添加一个 Qlabel,相关设置之后,就是将用户选择的图片路径给 srcLabel 去显示。
设置父窗体为桌面先判断是否找到桌面,然后再给桌面设置自己的 Widget 为它的父亲,这样就完成了桌面壁纸的设置
## 数字时钟壁纸
#### MyClock
这是自己重写的 QWidget 类 `MyClock`,主要完成的是绘制问题,设置锚点,然后绘制,个中计算复杂,这里就不一一介绍,详情看源码
#### 将 MyClock 设置到桌面
~~~C++
void Setting::on_apply_pushButton_clicked()
{
if(desktopWnd) //设置父窗体为桌面
{
SetParent((HWND)LabWidget->winId(), desktopWnd);
}
LabWidget->setWindowFlags(Qt::FramelessWindowHint); //无边框
LabWidget->showFullScreen(); //全屏
}
~~~
这里要无边框全屏显示,否则显示不全
## 动态壁纸
动态壁纸就是将与桌面建立父子关系的 Widget 显示视频,这个就需要视频解码,Qt 自带的 `QMediaPlayer` 虽然也能解码,但是视频解码的种类拙荆见肘,我就记的可以解码一个.avi 格式的视频
那如果想要显示 mp4,WMV 等等格式的视频
#### 推荐 **libvlc**
![](https://www.writebug.com/myres/static/uploads/2022/5/21/ba65ac0bb2b6773e31b7557479ccd463.writebug)
> VLC 是一个**免费的开源跨平台多媒体播放器和框架**,可播放大多数多媒体文件以及 DVD,音频 CD,VCD 和各种流媒体协议。从技术上讲,它是一个软件包,可以处理计算机和网络上的媒体。它提供直观的 API 和模块化架构,可轻松添加对新编解码器,容器格式和传输协议的支持。来自 VLC 的大多数已知软件包是 Windows,Linux 和 OSX 上常用的播放器。
这里我先给出本期项目的 GitHub 地址,关于 Star,如果有 Star 的话,这个项目我会继续增加完善功能,上次的 NodePad 一堆的 Bug,没有兴趣去解决,以后无聊了在去解决
DeskGirl
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+源码 简单来说就是找到桌面 Program Manager,给桌面发送 0x52c 消息,让它接触父子关系,然和将自己写好的窗口和它建立父子关系 `SetParent` 详细介绍参考:https://blog.csdn.net/newlw/article/details/124913995
资源推荐
资源详情
资源评论
收起资源包目录
基于C语言设计的无边框背景透明窗体.zip (206个子文件)
Clock.pro.user.4.8-pre1 23KB
Clock.pro.user.c89dd91 23KB
Clock.pro.user.cb5ce59 23KB
setting.cpp 10KB
widget.cpp 10KB
myclock.cpp 8KB
widget.cpp 7KB
screen.cpp 6KB
vlcplayer.cpp 6KB
finddesktop.cpp 948B
main.cpp 164B
main.cpp 163B
设计报告.docx 781KB
libvlc_media_player.h 71KB
vlc_about.h 48KB
vlc_fourcc.h 35KB
vlc_threads.h 31KB
libvlc_media.h 28KB
vlc_common.h 28KB
vlc_es.h 22KB
vlc_input.h 22KB
vlc_variables.h 21KB
vlc_arrays.h 20KB
vlc_block.h 20KB
vlc_plugin.h 20KB
libvlc.h 19KB
vlc_demux.h 17KB
vlc_dialog.h 17KB
vlc_playlist.h 16KB
vlc_stream.h 16KB
vlc_input_item.h 16KB
vlc_vout_display.h 16KB
vlc_aout.h 15KB
vlc_filter.h 15KB
vlc_codec.h 14KB
deprecated.h 14KB
vlc_text_style.h 13KB
libvlc_vlm.h 12KB
vlc_tls.h 12KB
vlc_vlm.h 12KB
vlc_block_helper.h 12KB
vlc_vout_window.h 11KB
vlc_config_cat.h 10KB
vlc_sout.h 10KB
vlc_interface.h 10KB
vlc_keystore.h 10KB
vlc_network.h 9KB
vlc_configuration.h 9KB
vlc_fs.h 9KB
vlc_actions.h 9KB
vlc_subpicture.h 9KB
vlc_picture.h 9KB
vlc_charset.h 8KB
libvlc_dialog.h 8KB
libvlc_events.h 8KB
vlc_meta.h 8KB
vlc_interrupt.h 7KB
vlc_services_discovery.h 7KB
libvlc_renderer_discoverer.h 7KB
libvlc_media_list_player.h 7KB
vlc_atomic.h 7KB
vlc_url.h 7KB
vlc_es_out.h 7KB
vlc_picture_pool.h 6KB
vlc_events.h 6KB
vlc_bits.h 6KB
libvlc_media_list.h 6KB
vlc_renderer_discovery.h 6KB
vlc_addons.h 6KB
libvlc_media_discoverer.h 6KB
vlc_media_library.h 6KB
vlc_stream_extractor.h 6KB
vlc_httpd.h 6KB
vlc_vout.h 6KB
vlc_video_splitter.h 5KB
vlc_cpu.h 5KB
vlc_boxes.h 5KB
vlc_mouse.h 5KB
vlc_strings.h 5KB
vlc_config.h 4KB
vlc_mtime.h 4KB
vlc_epg.h 4KB
vlc_messages.h 4KB
vlc_modules.h 4KB
vlc_opengl.h 4KB
vlc_http.h 4KB
vlc_xml.h 3KB
vlc_timestamp_helper.h 3KB
vlc_vout_osd.h 3KB
vlc_image.h 3KB
vlc_spu.h 3KB
vlc_fingerprinter.h 3KB
vlc_objects.h 3KB
libvlc_media_library.h 3KB
setting.h 3KB
vlc_picture_fifo.h 3KB
vlc_access.h 2KB
vlc_memstream.h 2KB
vlc_viewpoint.h 2KB
libvlc_version.h 2KB
共 206 条
- 1
- 2
- 3
资源评论
shejizuopin
- 粉丝: 9594
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 筷手引流工具.apk
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功