ffmpeg播放器实战(视频播放ui)

简介: 视频播放ui
+关注继续查看

1.逻辑

image.png

2.构造和析构函数

Display::Display(QWidget *parent)
    : QWidget{parent}
{
    mWidth  = 16;
    mHeight = 9;

    mVideo = new QWidget(this);
    //使用setAutoFillBackground函数可以启用或禁用自动填充背景的功能
    mVideo->setAutoFillBackground(true);
    //Qt::WA_StyledBackground是一个用于启用QWidget的样式背景的属性
    mVideo->setAttribute(Qt::WA_StyledBackground);
    mVideo->setStyleSheet("background-color: black;");

    this->setAutoFillBackground(true);
    this->setAttribute(Qt::WA_StyledBackground);
    this->setStyleSheet("background-color: black;");
}
Display::~Display()
{
    delete mVideo;
}

3.重绘

void Display::resizeEvent(QResizeEvent* event)
{
    setWidgetSize();
    QWidget::resizeEvent(event);
}

void Display::setWidgetSize()
{
    int widgetWidth  = this->width();
    int widgetHeight = this->height();

    /*
     *   宽比     宽度
     *   ——   =  ——
     *   高比     高度
     *
     *  根据宽度得到高度
     *
     *  如果得到高度大于实际高度
     *
     *  则:
     *
     *  根据高度得到宽度
     *
     */
    int tempWidth    = widgetWidth;
    int tempHeight   = tempWidth * this->mHeight / this->mWidth;
    if (tempHeight > widgetHeight) {
        tempHeight = widgetHeight;
        tempWidth  = tempHeight * this->mWidth / this->mHeight;
    }
    //如果计算出来在波动范围内则不动
    if (tempWidth >= widgetWidth - 1 && tempWidth <= widgetWidth + 1 && tempHeight >= widgetHeight - 1 && tempHeight <= widgetHeight + 1)
        return;
    mVideo->setGeometry((widgetWidth - tempWidth) / 2, (widgetHeight - tempHeight) / 2, tempWidth, tempHeight);
}
void Display::setNewSize(int width, int height)
{
    mWidth  = width;
    mHeight = height;
    setWidgetSize();
}

QWidget* Display::getVideo()
{
    return mVideo;
}
相关文章
|
存储 Python
【Pyqt实战】1-100算式练习题自动生成器(含UI界面,python代码),可自行选择参数
【Pyqt实战】1-100算式练习题自动生成器(含UI界面,python代码),可自行选择参数
【Pyqt实战】1-100算式练习题自动生成器(含UI界面,python代码),可自行选择参数
|
小程序 JavaScript API
【Pyqt实战】全国天气查询小程序(含UI界面,python代码)
【Pyqt实战】全国天气查询小程序(含UI界面,python代码)
【Pyqt实战】全国天气查询小程序(含UI界面,python代码)
|
测试技术 Apache 数据库
曲鸟全栈UI自动化教学(六):开始实战吧 实战环境准备
曲鸟全栈UI自动化教学(六):开始实战吧 实战环境准备
曲鸟全栈UI自动化教学(六):开始实战吧 实战环境准备
|
设计模式 存储 测试技术
实战 | UI 自动化测试框架设计与 PageObject 改造
![](https://ceshiren.com/uploads/default/original/3X/e/f/efd4f6ab53cc4a449657509b655cf5e6499878e5.jpeg) 在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: - 简单的录制/回放速度快,但无法适应复杂场景; - 编写自动化测试脚本比较灵活,但工作量大且可维护性差; - 以往的
|
Java 流计算
【Flink实战系列】Blink的UI焕然一新,我觉得还行
今天带大家看一下Blink的UI的一些新功能,编译的过程这里就不说了,网上也有很多的教程,我们直接启动一个Blink的standalone的集群,然后进入他的UI页面,我先放几张截图,大家随意感受一下 首先给人的第一感觉就是界面做的很炫酷,比Flink的UI要丰富很多,不像Flink的UI那样简单,界面也很阿里风格,多了很多新的功能,然后我们直接提交一个job上去,选择正在运行的job,如下图所示
|
存储 XML JSON
UI 自动化测试实战(二)| 测试数据的数据驱动
UI 自动化测试实战(二)| 测试数据的数据驱动
|
JavaScript 前端开发 Java
Vue3 的学习教程汇总、源码解释项目、支持的 UI 组件库、优质实战项目
Vue3 的学习教程汇总、源码解释项目、支持的 UI 组件库、优质实战项目
495 0
Vue3 的学习教程汇总、源码解释项目、支持的 UI 组件库、优质实战项目
推荐文章
更多