QT5:图片显示+屏幕滚动

目录

前言

一、简单图片显示

1.加载图片资源

2.简单显示图片

3.显示效果

二、实现屏幕滚动

1.QScrollArea 实现滚动效果

2.滑动优化

3.显示效果

总结


前言

初次使用qt,版本为5.12.7,做些简单记录。


一、简单图片显示

1.加载图片资源

首先准备好要用的图片资源,放到一个文件夹中(imgs),左键单击工程选择 “Add New...”

在“文件和类”中选择  QT->QT Resourse File

 名称自定义,路径选择保存图片的文件夹(imgs)

 点击 “Add Prefix”,会出现默认前缀,这里修改为简单的前缀/,不修改也行,此时“Add Files”变成可点击项。

 点击Add Files” 出现文件夹下的图片资源,这里只添加1.jpg.

 完成后Ctrl+S保存images.qrc文件(这里没*号),之后就可以在代码中引用图片资源。

2.简单显示图片

这里用Qlable简单的显示图片,由于图片是800*800,因此使用了缩放功能让图片随lable大小进行缩放。

选中图片可copy路径:

在mainwindow.cpp文件下加入代码: 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QImage im;
    //图片路径可以通过右击工程的图片获取
    im.load(":/1.jpg");
    
    QLabel *lab = new QLabel(this);
    //设置lable位置及大小:200*200
    lab->setGeometry(10,10,200,200);
    QPixmap pixmap = QPixmap::fromImage(im);

    int with = lab->width();
    int height = lab->height();
    // QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);  // 饱满填充

    //选择让图片按比例缩放
    QPixmap fitpixmap = pixmap.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);  // 按比例缩放
    lab->setPixmap(fitpixmap);
}

3.显示效果

这里是交叉编译后在屏上显示的效果。 


二、实现屏幕滚动

1.QScrollArea 实现滚动效果

将显示的图片复制多份,通过QScrollArea实现滚动显示效果:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QScrollArea>
#include <QScrollBar>
#include <QWidget>
#include <QScroller>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    QScrollArea *sa = new QScrollArea(this);
    sa->setGeometry(10, 30, 700, 1250);
            
    //水平方向滑动
//  sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    //垂直方向挥动(显示滑动条)
    sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    QWidget *w = new QWidget(sa);
    sa->setWidget(w);
    w->setGeometry(0, 0, 650, 250*70);//主要是设置长宽,xy意义不大


    QImage im;
    //图片路径可以通过右击工程的图片获取
    im.load(":/1.jpg");

    for(int i=0;i<70;i++)
    {
      for(int j=0;j<3;j++)
      {
         QLabel *lab = new QLabel(w);
         lab->setGeometry(0,0,200,200);
         QPixmap pixmap = QPixmap::fromImage(im);
         int with = lab->width();
         int height = lab->height();
         // 按比例缩放
         QPixmap fitpixmap = pixmap.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); 

         lab->setPixmap(fitpixmap);
         lab->move(0+j*200,i*250);

         QLabel *label = new QLabel(QString("%1.jpg").arg(i + 1), w);
         label->setFixedSize(200, 50);
         label->move(0+j*200,(i+1)*200+i*50);
       }

    }


}

2.滑动优化

上面代码虽然实现了滚动显示图片,但其缺陷在于只能通过滑动右侧滑动条来实现滚动显示,这对于触摸屏显示基本是不可接受的,通过增加下面代码来实现手指上下滑动进行屏幕滚动显示。

//右侧滑动条不可用
QScroller::grabGesture(sa, QScroller::LeftMouseButtonGesture);

//右侧滑动条可用
//QScroller::grabGesture(sa->viewport(),QScroller::LeftMouseButtonGesture);


3.显示效果

qt_demo


总结

因为是初次接触使用qt,因此对一些控件的使用并没有什么深刻理解,仅参考网上示例加以使用,因此本示例仅供参考,也感谢网上其它愿意分享经验的博主提供的帮助。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值