>>主要功能:

    (1)图片切换浏览,上一张/下一张

    (2)图片放大、缩小。包括两种机制:鼠标滚轮和按钮放大/缩小。

    (3)图片自动循环播放,间隔2s。点击播放后,其他操作均无效,直至点击暂停

    (4)图片顺时钟旋转,每次90度。可在放大/缩小状态下旋转,或者相反。

    (5)在图片被放大/缩小/旋转后,点击还原或者切换图片时,自动恢复为默认大小。

 >>最终效果:

(1)点击播放按钮:

(2)暂停后,点击下一张:

(3)点击放大(或鼠标滚轮往前滚动):

(4)点击还原:

(5)点击缩小(或鼠标滚轮往后滑动):

(6)点击上一张:

(7)点击旋转:

(8)点击缩小(或鼠标滚轮往后):

(9)点击还原:

>>添加程序:

  新建Gui工程,名为MyPictureView,类名MyPictureView,基类选择QWidget。

mypictureview.h

#ifndef MYPICTUREVIEW_H
#define MYPICTUREVIEW_H #include <QWidget>
#include <QVector>
#include <QPixmap>
#include <QTimer>
#include <QFileDialog>
#include <QString>
#include <QLabel>
#include <QWheelEvent> namespace Ui {
class MyPictureView;
} class MyPictureView : public QWidget
{
Q_OBJECT public:
MyPictureView(QVector<QPixmap *> &pictures); ~MyPictureView(); private slots:
void on_btn_prev_clicked(); void on_btn_spin_clicked(); void on_btn_play_stop_clicked(); void on_btn_orig_clicked(); void on_btn_next_clicked(); void on_btn_big_clicked(); void on_btn_smal_clicked(); void wheelEvent(QWheelEvent * event); void pic_showloop(); private:
Ui::MyPictureView *ui;
QVector<QPixmap *> &pictures_;
QTimer *timer;
QPixmap pix;
QLabel *label; void pic_show1();
void pic_show2(); bool isPlaying;
float scale;
int size;
int currentIndex;
int imageAngle;
}; #endif // MYPICTUREVIEW_H

mypictureview.h

mypictureview.cpp

#include "mypictureview.h"
#include "ui_mypictureview.h" MyPictureView::MyPictureView(QVector<QPixmap *> &pictures)
: pictures_(pictures),
ui(new Ui::MyPictureView)
{
ui->setupUi(this); scale = ;
currentIndex = ; // Current picture index
size = pictures_.size();
isPlaying = false;
imageAngle = ; label = new QLabel;
ui->scrollArea->setWidget(label);
ui->scrollArea->setAlignment(Qt::AlignCenter); //显示位置,对齐方式 timer = new QTimer;
timer->setInterval( * ); //2s
connect(timer,SIGNAL(timeout()),this,SLOT(pic_showloop())); label->setAlignment(Qt::AlignCenter); if(size > )
pic_show1();
} MyPictureView::~MyPictureView()
{
delete ui;
} void MyPictureView::on_btn_prev_clicked() //上一张
{
timer->stop(); scale = ;
imageAngle = ;
currentIndex--;
if(currentIndex<)
currentIndex=size-; pic_show1();
} void MyPictureView::on_btn_spin_clicked() //旋转
{
imageAngle += ;
imageAngle = imageAngle % ; pic_show2();
} void MyPictureView::on_btn_play_stop_clicked() //播放、暂停,间隔2s
{
isPlaying = !isPlaying; if(isPlaying)
{
ui->btn_play_stop->setText(tr("暂停"));
timer->start();
ui->btn_big->setEnabled(false);
ui->btn_next->setEnabled(false);
ui->btn_orig->setEnabled(false);
ui->btn_prev->setEnabled(false);
ui->btn_smal->setEnabled(false);
ui->btn_spin->setEnabled(false);
}
else
{
ui->btn_play_stop->setText(tr("播放"));
timer->stop();
ui->btn_big->setEnabled(true);
ui->btn_next->setEnabled(true);
ui->btn_orig->setEnabled(true);
ui->btn_prev->setEnabled(true);
ui->btn_smal->setEnabled(true);
ui->btn_spin->setEnabled(true);
}
} void MyPictureView::on_btn_orig_clicked() //还原
{
timer->stop();
scale = ;
imageAngle = ; pic_show1();
} void MyPictureView::on_btn_next_clicked() //下一张
{
timer->stop();
scale = ;
imageAngle = ;
currentIndex++;
if(currentIndex>size-)
currentIndex = ; pic_show1();
} void MyPictureView::on_btn_big_clicked() //放大
{
timer->stop();
scale = scale*1.25; //和0.8对应,放大次数和缩小次数点击相同次,会还原到原来的样子 if(imageAngle != )
pic_show2();
else
pic_show1();
} void MyPictureView::on_btn_smal_clicked() //缩小
{
timer->stop();
scale = scale*0.8; if(imageAngle != )
pic_show2();
else
pic_show1();
} void MyPictureView::wheelEvent(QWheelEvent *event) //滚轮放大或缩小
{
int num = event->delta();
if(!isPlaying)
{
if(num > )
on_btn_big_clicked();
else
on_btn_smal_clicked();
}
} void MyPictureView::pic_show1() //显示图片
{
pix = (*pictures_[currentIndex]).scaled(*scale,*scale,Qt::KeepAspectRatio); label->setPixmap(pix);
} void MyPictureView::pic_show2() //旋转后的显示
{
QMatrix leftmatrix; leftmatrix.rotate(*imageAngle); pix = (*pictures_[currentIndex]).scaled(*scale,*scale,Qt::KeepAspectRatio);
label->setPixmap(pix.transformed(leftmatrix,Qt::SmoothTransformation));
} void MyPictureView::pic_showloop() //循环显示图片
{
scale = ; currentIndex ++;
if(currentIndex > size-)
currentIndex = ;
pic_show1(); }

mypictureview.cpp

main.cpp

#include "mypictureview.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv); QVector<QPixmap *> pictures;
pictures.push_back(new QPixmap(":/pictures/1"));
pictures.push_back(new QPixmap(":/pictures/2"));
pictures.push_back(new QPixmap(":/pictures/3"));
pictures.push_back(new QPixmap(":/pictures/4"));
pictures.push_back(new QPixmap(":/pictures/5"));
pictures.push_back(new QPixmap(":/pictures/6"));
pictures.push_back(new QPixmap(":/pictures/7"));
pictures.push_back(new QPixmap(":/pictures/8")); MyPictureView view(pictures); // Disable maximize and minimize button
view.setWindowFlags(view.windowFlags()
& ~Qt::WindowMaximizeButtonHint
& ~Qt::WindowMinimizeButtonHint);
view.show(); return a.exec();
}

main.cpp

 添加资源:

(1)资源名随便起一个,我这里起的是pictures,然后我在工程目录下新建了一个文件夹来存放图片资源,取名为picture。

(2)在资源管理器中,先修改一下前缀,可以直接输入一个“/”  。我这里输入的是“/pictures”。

(3)可以选择为每个图片起一个别名,我这里分别用数字1~8代替图片的名字。

现在,我们就可以使用QPixmap(":/pictures/1")来加载别名为1的图片。

Ubuntu上Qt之简单图片浏览器的更多相关文章

  1. android脚步---简单图片浏览器改变图像透明度

    图片浏览器调用ImageView的setAlpha方法来实现改变图片透明度. main.xml文件如下:三个按钮,两个imageview,,界面定义了两个ImageView,一个是显示局部图片的Ima ...

  2. Ubuntu上Qt+Tcp网络编程之简单聊天对话框

    首先看一下实现结果: >>功能: (1)服务器和客户端之间进行聊天通信: (2)一个服务器可同时给多个客户端发送消息:(全部连接时)   也可以只给特定的客户端发送消息:(连接特定IP) ...

  3. Ubuntu上qt环境的构建

    写在前面.......这个教程好像比较早一点了,现在介绍一个新的思路: 整体参见如下步骤(for zedboard): 1.首先下载qt-opensource-linux.run文件,然后跟在Wind ...

  4. Android 简单图片浏览器 读取sdcard图片+形成缩略图+Gallery

    1.读取SD卡上面的图片信息 //想要的返回值所在的列 String[] projection = { MediaStore.Images.Thumbnails._ID}; //图片信息存储在 and ...

  5. Ubuntu上部署一个简单的Java项目

    一.安装tomcat7,mysql,Java JDK,直接apt安装 $ sudo aptitude install tomcat7 $ -jdk openjdk--jre $ sudo aptitu ...

  6. Android简单图片浏览器

    效果如下:            代码编写如下: Crize_demo\app\src\main\res\layout\activity_main.xml <!--定义一个线性布局--> ...

  7. Android小案例——简单图片浏览器

    今天上午休息看Android书,里面有个变化图片的示例引起了我的兴趣. 示例需求: 有N张图片,循环显示图片的内容.如果需求让我写我会使用一个变量count来保存显示图片数据的索引,图片显示时做个判断 ...

  8. Android:ImageView应用之图片浏览器

    ImageView控件实现的简单图片浏览器 一.纯显示图片: 引言: 读者在做这个东西的时候,需要自己把图片在源程序中导入. 读者要注意:所有导入的图片之前,图片的命名只可以是小写英文和数字. 效果图 ...

  9. Java实现简单的图片浏览器

    第一次写博客,不喜勿喷. 最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下. 学校的教程是用Swing来做界面的,所以这里也用这个来讲. 首先要做个大概的界面出 ...

随机推荐

  1. react学习笔记2之正确使用状态

    //状态不要直接修改,比如: // 错的,这样写不会重新渲染组件 this.state.comment = 'Hello'; //修改状态正确的方式 this.setState({comment:'H ...

  2. docker的/var/lib/docker/overlay文件夹突然占满了硬盘

    场景描述 事情是这样的,前两天客户的服务器突然断电了,导致用docker部署的服务也挂了.昨天去现场,重启了docker,同时准备更新一下服务.结果发现有一台节点硬盘满了- 还是觉得有些奇怪的,毕竟d ...

  3. python 读取mysql数据至csv文件中,并发送邮件

    test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...

  4. JAVA中有一个特殊的类: Object。它是JAVA体系中所有类的父类(直接父类或者间接父类)。

    接口往往被我们定义成一类XX的东西. 接口实际上是定义一个规范.标准.   ①  通过接口可以实现不同层次.不同体系对象的共同属性: 通过接口实现write once as anywhere. 以JA ...

  5. Angular4学习笔记-目录汇总

    Angular4学习笔记(一)-环境搭建 Angular4学习笔记(二)-在WebStorm中启动项目 Angular4学习笔记(三)- 路由 Angular4学习笔记(四)- 依赖注入 Angula ...

  6. python2与python3中除法的区别

    python2中的除法 >>>1/2 0 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分 有时候,这个功能比较有用,譬如在做一些需要取位数 ...

  7. 一、K3 WISE 开发插件《K3 WISE常用数据表整理》

    在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------FStatus ...

  8. redis出现错误:NOAUTH Authentication required.

    出现认证问题,应该是设置了认证密码,输入密码既可以啦 注意密码是字符串形式! 127.0.0.1:6379> auth "yourpassword" 127.0.0.1:63 ...

  9. 【转】Android 为什么 dp2px 或 px2dp 公式需要加 0.5f

    转自:http://blog.csdn.net/changcsw/article/details/52440543 网上 dp2px 和 px2dp 公式: public static int px2 ...

  10. Cookiecutter: 更好的项目模板工具:(2)安装及基础使用

    安装 通过python包管理工具 命令行输入 $pip install cookiecutter 或者 # mac os经常会禁止用户全局安装python包 $pip install --user c ...