Qt使用QPainter绘制方式显示图片

Qt使用QPainter绘制方式显示图片

文章目录

  • Qt使用QPainter绘制方式显示图片
    • 1、前言
    • 2、主要代码
    • 3、实现效果
    • 4、源代码

更多精彩内容
个人内容分类汇总

1、前言

  • 在Qt里如果需要显示图片最先想到的就是用一个QLabel来显示,一行代码就可以,十分简单,但如果需要频繁的更新图片,比如显示视频,那用QLabel就不行了,效率会比较低,导致界面会很卡;
  • 这时就可以用QPainter绘制图片和OpenGL绘制图片来提升效率了;
  • OpenGL使用会比较复杂,对于小白来说不是很友好;
  • 所以如果不是显示大图片、大数据量的图片或者高刷新率的话用QPainter绘制足够了
  • 在这个Demo中使用QPainter绘制方式同时以50Hz频率显示64路图片毫无压力(图片不是很大);
  • 支持传入QPixmap、QImage两种格式;
  • 使用简单(主要代码不超过50行),没有第三方依赖,使用与所有平台、任意编译器;
  • 支持自适应窗口缩放图片,并且保持纵横比。

2、主要代码

  • playimage.h
#ifndef PLAYIMAGE_H
#define PLAYIMAGE_H

#include 

class PlayImage : public QWidget
{
    Q_OBJECT
public:
    explicit PlayImage(QWidget *parent = nullptr);

    void updateImage(const QImage& image);
    void updatePixmap(const QPixmap& pixmap);

signals:

protected:
    void paintEvent(QPaintEvent *event) override;

private:
    QPixmap m_pixmap;
};

#endif // PLAYIMAGE_H

  • playimage.cpp
#include "playimage.h"

#include 

PlayImage::PlayImage(QWidget *parent) : QWidget(parent)
{

}

/**
 * @brief        传入Qimage图片显示
 * @param image
 */
void PlayImage::updateImage(const QImage& image)
{
    updatePixmap(QPixmap::fromImage(image));
}

/**
 * @brief        传入QPixmap图片
 * @param pixmap
 */
void PlayImage::updatePixmap(const QPixmap &pixmap)
{
    m_pixmap = pixmap;
    update();
}

/**
 * @brief        使用Qpainter显示图片
 * @param event
 */
void PlayImage::paintEvent(QPaintEvent *event)
{
    if(!m_pixmap.isNull())
    {
        QPainter painter(this);
#if 0
        // 经过粗略测试,QImage先缩放后转为QPixmap的方式在图像比较小时耗时少,图片越大耗时远大
        QPixmap pixmap = QPixmap::fromImage(m_image.scaled(this->size(), Qt::KeepAspectRatio));
        // 先将QImage转换为QPixmap再进行缩放则耗时比较少,并且稳定,不会因为缩放图片大小而产生太大影响
        QPixmap pixmap1 = QPixmap::fromImage(m_image).scaled(this->size(), Qt::KeepAspectRatio);
#endif
        QPixmap pixmap = m_pixmap.scaled(this->size(), Qt::KeepAspectRatio);
        int x = (this->width() - pixmap.width()) / 2;
        int y = (this->height() - pixmap.height()) / 2;
        painter.drawPixmap(x, y, pixmap);
    }
    QWidget::paintEvent(event);
}


3、实现效果

4、源代码

gitee
github

你可能感兴趣的:(QT,#,QPainter绘图,qt,QPainter,Qt绘图,视频)