当前位置 博文首页 > fearlazy:浅谈一个图片查看器的实现2(基于图形视图框架)

    fearlazy:浅谈一个图片查看器的实现2(基于图形视图框架)

    作者:[db:作者] 时间:2021-06-18 21:10

    imgviewer2.gif

    ?

    一、前言

    ? ? 之前使用QWidget写了一个图片查看器,有网友表示可以用图形视图框架来写。于是随便写一个玩玩。

    ?

    二、思路

    ????1.图片查看器继承于QGraphicsView。

    ? ? 2.使用QGraphicsPixmapItem来显示图片。

    ? ? 3.图片的移动只需要设置QGraphicsPixmapItem的标志位可移动即可。

    ? ? 4.图片的缩放使用QGraphicsPixmapItem的scale即可。

    ?

    三、关键代码

    ? ?1.基本条件:创建view、scene、item。设置Item可移动。

    ImageViewer::ImageViewer(QWidget?*parent):QGraphicsView(parent)
    {
    ????//场景
    ????m_scene?=?new?QGraphicsScene();
    ????m_scene->setBackgroundBrush(QBrush(QColor(40,40,40)));
    ????setScene(m_scene);
    
    ????//item
    ????m_pixmapItem?=?new?QGraphicsPixmapItem();
    ????m_pixmapItem->setFlag(QGraphicsItem::ItemIsMovable);?//设置item可移动
    ????m_scene->addItem(m_pixmapItem);
    
    ????//隐藏滚动条
    ????setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ????setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    }
    

    ?2. 缩放,在滚轮事件中判断,需要注意的是要设置item的缩放原点为Item的中心点。默认是左上角的不好看。

    void?ImageViewer::wheelEvent(QWheelEvent?*event)
    {
    ????qreal?fScale?=?m_pixmapItem->scale();
    ????if(event->delta()?<?0){
    ????????fScale?*=?0.9;
    ????}else{
    ????????fScale?*=?1.1;
    ????}
    ????m_pixmapItem->setTransformOriginPoint(m_pixmapItem->boundingRect().center());?//设置缩放的原点为中心位置
    ????m_pixmapItem->setScale(fScale);
    }
    


    本例只是简单的实现图片的缩放和移动,其他细节没有深究,有兴趣的朋友可以研究一下。

    下一篇:没有了