IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QT 视频窗口 OSD 使用详解 -> 正文阅读

[C++知识库]QT 视频窗口 OSD 使用详解

  • QT 视频窗口 OSD

效果展示

  1. 悬浮 FormSensorPannel 设置

在构造函数中

1》//设置 Qt::FramelessWindowHint|Qt::Tool

Qt::Tool 表示小部件是一个工具窗口。 工具窗口通常是一个小窗口,具有比通常的标题栏和装饰更小的窗口,通常用于工具按钮的集合。 如果有父级,则工具窗口将始终保留在其顶部。

注意: 这里不能设置成Qt::Tool//Qt::WindowStaysOnTopHint | 否则 FormSensorPannel 会悬浮所有窗口之上。

注意这句话 :如果有父级,则工具窗口将始终保留在其顶部

setWindowFlags( Qt::FramelessWindowHint|Qt::Tool );// |Qt::Tool//Qt::WindowStaysOnTopHint |

2》

// 设置窗口透明

this->setAttribute(Qt::WA_TranslucentBackground, true);

2.FormSensorPannel 中可以重载 paintEvent(QPaintEvent * event)

paintEvent(QPaintEvent * event)

//设置边框 背景

void FormSensorPannel::paintEvent(QPaintEvent * event) { int colorR(192); //默认背景颜色和透明度为QColor(135,206,250,122) 浅蓝色 int colorG(192); int colorB(192); int colorA(100); QPainter painter(this); painter.setBrush(QColor(colorR,colorG,colorB,colorA));//最后一位是设置透明属性(在0-255取值) painter.setPen(QColor(colorR,colorG,colorB,colorA)); painter.drawRect(0,0, this->width(), this->height()); }

3.在videoWidget 中

1》 创建FormSensorPannel

m_pFormSensorPannel =new FormSensorPannel(this);

注意必须指定 父窗口。否则FormSensorPannel 回脱离窗口,在桌面,或其他窗口上悬浮。如下图

2》 设置Qt::Tool 后, FormSensorPannel会脱离父窗口坐标

调用 setGeometry 是相对桌面坐标

如 m_pFormSensorPannel->setGeometry(0,0,100,40);在桌面左上角显示了

该使用 move函数 移动到视频窗口

m_pFormSensorPannel->move(this->mapToGlobal(QPoint(0, 5)));

如图移动到视频上了

3. previewItem 重载 showEvent(QShowEvent *event); hideEvent(QHideEvent *event);

视频previewItem 隐藏后FormSensorPannel 并不会隐藏

如图,16路视频窗口隐藏只剩下1路,但是FormSensorPannel 都没有隐藏

需要对previewItem 重载

void showEvent(QShowEvent *event);

void hideEvent(QHideEvent *event);

void previewItem::showEvent(QShowEvent *event) { m_pFormSensorPannel->show(); } void previewItem::hideEvent(QHideEvent *event) { m_pFormSensorPannel->hide(); }

当16路切换4路如图

4. previewItem 重载 resizeEvent(QResizeEvent *event)

m_pFormSensorPannel->resize(this->width() - (2 * 2),40); m_pFormSensorPannel->move(this->mapToGlobal(QPoint(0, 5)));

5.previewItem 重载 moveEvent(QMoveEvent *event)

m_pFormSensorPannel->resize(this->width() - (2 * 2),40); m_pFormSensorPannel->move(this->mapToGlobal(QPoint(0, 5)));

6.mainWindow 移动move 对 FormSensorPannel 影响

mainWindow 移动并不会 触发 previewItem 的moveEvent事件。

mainWindow 重载 moveEvent 并且查找出说要previewItem 子控件。

通过 QApplication::sendEvent(pWidget, event); 发送移动事件

void MainWindow::moveEvent(QMoveEvent *event) { QList<previewItem*> labelList = findChildren<previewItem*>(); qDebug()<<Q_FUNC_INFO<<labelList.size(); foreach(previewItem *pWidget,labelList) { QApplication::sendEvent(pWidget, event); } }

7.mainWindow 最小化影响

mainWindow 最小化不会 触发 previewItem。

mainWindow 重载 moveEvent 并且查找出说要previewItem 子控件。

void MainWindow:: hideEvent(QHideEvent *event) { QList<previewItem*> labelList = findChildren<previewItem*>(); qDebug()<<Q_FUNC_INFO<<labelList.size(); foreach(previewItem *pWidget,labelList) { QApplication::sendEvent(pWidget, event); } }

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:04:24  更:2022-03-16 22:05:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:52:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码