| |
|
开发:
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 使用详解 |
效果展示
在构造函数中 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语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |