Qt中的QGraphicView和QGraphicScene简单使用

概述:我们利用QGraphicView和QGraphicScene来实现一个简单的视频播放器,然后上面悬浮一些操作的控件,看看怎么来实现。

1、CcTestVideoPlayer类

        模拟播放器类,继承QGraphicScene

1.1 CcTestVideoPlayer.h

#pragma once#include <QGraphicsView>
#include <QGraphicsScene>
#include <QVariant>
#include <QSharedPointer>class CcTestVideoPlayer : public QGraphicsView
{Q_OBJECTpublic:CcTestVideoPlayer(QWidget *parent = nullptr, QGraphicsScene* scene = nullptr);~CcTestVideoPlayer(void);protected:void drawBackground(QPainter *painter, const QRectF &rect)override;};

1.2 CcTestVideoPlayer.cpp

#include "CcTestVideoPlayer.h"#include <QLabel>
#include <QStyle>
#include <QPainter>
#include <QPaintEngine>
#include <QGraphicsProxyWidget>
#include <QMenu>
#include <QApplication>
#include <QTimer>CcTestVideoPlayer::CcTestVideoPlayer(QWidget *parent, QGraphicsScene* scene): QGraphicsView(parent)
{if (scene){scene->setParent(this);}setScene(scene ? scene : new QGraphicsScene(this));auto widget = new QWidget;widget->setStyleSheet("background:white;");widget->setFixedSize(QSize(300,420));scene->addWidget(widget)->setZValue(101);
}CcTestVideoPlayer::~CcTestVideoPlayer()
{}void CcTestVideoPlayer::drawBackground(QPainter *painter, const QRectF &rect)
{QGraphicsView::drawBackground(painter, this->rect());painter->fillRect(geometry(), QBrush("#0c0b0f"));
}

2、CcTestVideoSurface 

       继承QGraphicsScene

2.1 CcTestVideoSurface.h

#pragma once#include <QGraphicsScene>
#include <QObject>
#include <QLabel>class CcTestVideoSurface : public QGraphicsScene
{Q_OBJECTpublic:CcTestVideoSurface(QObject *parent = Q_NULLPTR);virtual ~CcTestVideoSurface(void);void showTips();private:QLabel* m_tipsInfoLabel = nullptr;QWidget* m_containter = nullptr;
};

2.2  CcTestVideoSurface.cpp

#include "CcTestVideoSurface.h"#include <QGraphicsProxyWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>CcTestVideoSurface::CcTestVideoSurface(QObject *parent): QGraphicsScene(parent)
{m_containter = new QWidget();m_containter->setObjectName(QStringLiteral("tip_container"));m_containter->setStyleSheet("#tip_container { background-color: transparent;}");m_tipsInfoLabel = new QLabel(nullptr);m_tipsInfoLabel->setFixedSize(120, 38);m_tipsInfoLabel->setObjectName(QStringLiteral("tip"));m_tipsInfoLabel->setStyleSheet("#tip { background-color: rgba(10,132,254,0.6); border: none; border-radius: 15px; font-size:12px; color:#edf1fa;}");m_tipsInfoLabel->setAlignment(Qt::AlignCenter);m_tipsInfoLabel->setText("测试悬浮在view");auto tipLayout = new QHBoxLayout;tipLayout->setSpacing(0);tipLayout->setMargin(0);tipLayout->addStretch();tipLayout->addWidget(m_tipsInfoLabel);tipLayout->addStretch();auto layout = new QVBoxLayout(m_containter);layout->setSpacing(0);layout->setMargin(0);layout->addStretch();layout->addLayout(tipLayout);layout->addSpacing(4);addWidget(m_containter)->setZValue(102);
}CcTestVideoSurface::~CcTestVideoSurface(void)
{}void CcTestVideoSurface::showTips()
{if (m_containter){m_containter->setVisible(true);}
}

3、main.cpp

#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-engine里面生成的动态库
#include "CcDataManage.h"
#include "CcJsonTool.h"#include "cc-test/CcTestVideoPlayer.h"
#include "cc-test/CcTestVideoSurface.h"//测试graphic viewvoid test_qJson()
{//TODO: qt json 简单使用测试auto cmd = 1001;auto type = 1;auto content = "05:00";QVariantMap contentMap;contentMap["cmd"] = QString::number(cmd);QVariantMap dataMap;dataMap["type"] = type;dataMap["content"] = content;contentMap["data"] = dataMap;CcJsonTool jsonTool;auto str = jsonTool.toJsonFromVariantMap(contentMap);qDebug() << "jsonStr:" << str;//jsonStrauto JsonStr = "{\"cmd\":\"1001\",\"data\":{\"content\":\"05:00\",\"type\":1}}";if (jsonTool.parseJsonFromString(JsonStr)){qDebug() << "parse json str success";}else{qDebug() << "parse json str failed";}
}void test_dll_manage()
{CcDataManage data_manage;qDebug() << "Get Data From cc-engine dynamic library: " << data_manage.GetCurrentJsonData();
}int main(int argc, char *argv[])
{QApplication app(argc, argv);//Qt json 简单测试test_qJson();//一个项目多个子项目,并且子项目是动态库调用测试test_dll_manage();//QGraphicView和QGraphicScene简单测试auto videoSurface = new CcTestVideoSurface();videoSurface->showTips();auto graphicView = new CcTestVideoPlayer(nullptr, new CcTestVideoSurface());graphicView->setFixedSize(QSize(520, 420));graphicView->show();// QWidget window;// window.resize(650, 350);// window.setWindowTitle("简单的cmake构建的Qt窗口程序");// window.show();return app.exec();
}

4、最终的结果

5、测试的源码

CcQtApp: Qt测试demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS】重采样栅格像元匹配问题:不同空间分辨率栅格数据统一

重采样栅格像元匹配问题&#xff1a;不同空间分辨率栅格数据统一 原始数据数据1&#xff1a;GDP分布数据2.1&#xff1a;人口密度数据2.2&#xff1a;人口总数数据3&#xff1a;土地利用类型 数据处理操作1&#xff1a;将人口密度数据投影至GDP数据&#xff08;栅格数据的投影变…

LVS做集群四层负载均衡的简单理解

背景&#xff1a;业务中主要是TCP/SSL连接&#xff0c;要做四层负载均衡。 之前做负载均衡&#xff0c;调研了nginx&#xff08;见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态&#xff09;。 nginx作为一个应用&#xff0c;做四层负载均衡效率低。lvs是li…

非同质化权益(NFR):重塑数字资产权益的生态系统

每天五分钟讲解一个互联网知识&#xff0c;大家好我是啊浩 随着区块链技术的深入发展和普及&#xff0c;数字资产已经逐渐渗透到我们生活的方方面面。在这一背景下&#xff0c;非同质化权益&#xff08;NFR&#xff09;作为一种新型的数字资产形式&#xff0c;不仅为数字资产权…

eBPF实践篇之环境搭建

文章目录 前言实验环境前置知识配置开发环境最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;本次我们学习一下eBPF&#xff0c;我们基于libbpf-bootstrap来进行我们的eBPF程序开发&#x1f917; 实验环境 一台Debian12操作系统的计算机&#xff0c;我使用的是Debian12.…

什么是索引?它们在MySQL中是如何工作的?什么是视图(View)?它们有什么用?

什么是索引&#xff1f;它们在MySQL中是如何工作的&#xff1f; 索引在MySQL中是一个数据结构&#xff0c;它帮助快速查询数据库中的数据。没有索引&#xff0c;查询可能需要遍历整个数据库表&#xff0c;这称为全表扫描&#xff0c;对于大型表来说非常慢。 索引的工作原理是创…

SpringBoot案例(黑马学习笔记)

这个案例呢&#xff0c;就是Tlias智能学习辅助系统。 参考接口文档完成后端功能的开 发&#xff0c;然后结合前端工程进行联调测试即可。 完成后的成品效果展示&#xff1a; 准备工作 需求&环境搭建 需求说明 部门管理 部门管理功能开发包括&#xff1a; ● 查询部门列…

亚信安慧AntDB数据库与流式处理的有机融合

流式处理的概念 2001年9月11日&#xff0c;美国世贸大楼被袭击&#xff0c;美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司&#xff0c;承担了大量基础支撑软件研发的任务。其中2009年正式发布的IBM InfoSphere Streams&#xff0c;就是…

杰理-按键多次按下识别多击

杰理-按键多次按下识别多击 #define ALL_KEY_EVENT_CLICK_ONLY 0 //是否全部按键只响应单击事件

自动化测试高效学习路线指导,提高你百倍自学效率

前言 从各方来的朋友&#xff0c;能够相聚这篇文章是大家的缘分&#xff0c;也是我的荣幸。 接下来&#xff0c;我要开始和大家讲讲如何从0开始学Python自动化测试。 不论是转行自动化测试还是功能测试进阶自动化还是开发转自动化测试的伙伴&#xff0c;这篇自动化测试工程师…

Zookeeper客户端命令、JAVA API、监听原理、写数据原理以及案例

1. Zookeeper节点信息 指定服务端&#xff0c;启动客户端命令&#xff1a; bin/zkCli.sh -server 服务端主机名:端口号 1&#xff09;ls / 查看根节点下面的子节点 ls -s / 查看根节点下面的子节点以及根节点详细信息 其中&#xff0c;cZxid是创建节点的事务id&#xff0c…

Rocky Linux 运维工具 firewall-cmd

一、firewall-cmd​的简介 ​​firewall-cmd​是基于firewalld的防火墙管理工具。用户可以使用它来配置、监控和管理防火墙规则&#xff0c;包括开放端口、设置服务规则等。 二、firewall-cmd​​的参数说明 序号参数描述1​​–zone指定防火墙区域2–add-portxxx/tcp允许特定…

tkinterFrame框架+标签框架LabelFrame+Toplevel窗口的使用

1.在tkinter中&#xff0c;Frame是一个容器小部件用于组织和管理其他小部件。它可以作为一个独立的可见区域&#xff0c;也可以作为其他小部件的父容器。 import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as mbm tk.Tk() m.title("tkinter L…

MSSQL渗透测试

目录 mssql数据库连接提权至服务器权限 拿到目标的IP地址&#xff0c;我们先对IP地址进行信息收集&#xff0c;收集信息资产&#xff0c;同时使用nmap对IP地址进行扫描 nmap -sC -sV IP从扫描的结果中&#xff0c;我们能知道目标服务器是windows操作系统&#xff0c;使用的是m…

DAY10-内容安全过滤技术概述

文件过滤技术流程: 应用行为控制技术具体:

W-TinyLFU 算法实现

前言 不同于常见的 LRU 或 LFU&#xff0c;Window TinyLFU 是一种非常高效的缓存设计方案。先来看下 LRU 和 LFU 算法的缺点&#xff1a; LFU 缺点&#xff1a; 需要为每个记录项维护频率信息&#xff0c;这将消耗大量的内存空间可能存在旧数据长期不被淘汰&#xff08;一开…

快速卷积介绍

快速卷积是一种使用快速傅里叶变换&#xff08;FFT&#xff09;来有效计算两个序列&#xff08;信号、函数等&#xff09;卷积的方法。快速卷积对于数字信号处理、图像处理、音频处理等领域至关重要&#xff0c;因为它大大提高了计算卷积的效率。 卷积的概念 卷积是一种数学运…

让AI给你写代码,初体验(二)-写一个flask应用

这里我们准备让AI做一个稍微复杂一点任务&#xff0c;写一个前后应用&#xff0c;具体&#xff1a; 前台用html输入股票代码&#xff0c;后台通过akshare的接口程序获取该股票的实时价格&#xff0c;然后返回显示在html 我们先用AI对话看一下&#xff0c;AI会给我们什么编码建…

Flink Catalog

1.Flink侧创建 按照SQL的解析处理流程在Parse解析SQL以后&#xff0c;进入执行流程——executeInternal。   其中有个分支专门处理创建Catalog的SQL命令 } else if (operation instanceof CreateCatalogOperation) {return createCatalog((CreateCatalogOperation) operatio…

[多进程] 进程间通信-笔记

文章目录 创建进程的方法Linuxforkexecsystem Windowscreateprocessshellexecutesystem 进程间通信方法管道&#xff08;Pipe&#xff09;管道的种类特点 通过文件通信内存映射&#xff08;文件映射&#xff09;匿名映射 共享内存 信号量(或者锁)消息队列Windows消息队列Linux…

finedance 测试笔记

目录 依赖库&#xff1a; 预测流程&#xff1a; 音乐wav切割120帧 general_all.py改进 smplx 学习笔记&#xff1a; 依赖库&#xff1a; import pickle5 as picklepypi尚pickle5最高python版本3.7&#xff1a; pickle5 PyPI 解决方法&#xff0c;改为 import pickle …