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

2018-04-26 22:31:47  阅读 209 次 评论 0 条

imgviewer2.gif

        作者:fearlazy。 有需要该源码的加微信fearlazy_com。

一、前言

    之前使用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);
}


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

本文地址:http://fearlazy.com/index.php/post/70.html
版权声明:本文为原创文章,版权归 fearlazy 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?