QT图片浏览器制作

这篇具有很好参考价值的文章主要介绍了QT图片浏览器制作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Win7的自带查看器的效果

二、自己手工制作的效果

1、UI界面

2、效果界面

三、代码实现

1、头文件

2、主代码

(1)全局定义和预加载

(2)列表按钮:tool_button

(3)切换图片

(4)自动播放和停播

(5)放大,缩小,图片旋转

总结:


传送门

1、利用控件实现文件打开,保存,退出功能。

2、将打开的文件路径显示到Widget的列表中。

3、实现图片的切换,旋转,缩放。

4、实现图片的自动播放和停止自动播放。

5、待完成:图片切换效果,图片删除,图片编辑。

6、用到了2个label,1个listWidget,7个push_button,1个tool_button。

7、借用了别人一些代码,我真的很菜。

一、Win7的自带查看器的效果

QT图片浏览器制作

二、自己手工制作的效果

1、UI界面

QT图片浏览器制作

2、效果界面

QT图片浏览器制作

注意:有个bug,缩小放大只能实现一次,不能连续放大和缩小,最后也没想出来。

三、代码实现

1、头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QMenu>
#include<QFileDialog>
#include<QListWidgetItem>
#include<QPixmap>
#include<QTimer>
#include<QImage>
#include<QPainter>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_toolButton_clicked();
    void on_toolButton_triggered(QAction *arg1);
    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

在这里没有用到信号,感觉没必要。 

2、主代码

(1)全局定义和预加载

#include "mainwindow.h"
#include "ui_mainwindow.h"
QImage* img;
QMenu *mu;
QTimer *timer;   计时器
//QPixmap *map;  画布
int a=1;  第几张
int b=6;  总张数
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    文件选项
    mu = new QMenu(ui->toolButton);
    mu->addAction("打开");
    mu->addAction("保存");
    mu->addAction("另存为");
    mu->addAction("退出");
    for (int i=1;i<=b ;i++ ) {
        把图片设置到标签列表中
        ui->listWidget->addItem("E:/QT/Image/"+QString::number(i)+".jpg");  转换路径格式
    }
    图片加载
    timer = new QTimer;
    img=new QImage;   QImage比QPixmap更优化,QImage为图像的像素级访问做了优化.
    img->load("E:/QT/Image/"+QString::number(a)+".jpg");
    ui->label->setPixmap(QPixmap::fromImage(*img));
    ui->label_2->setText("当前为第"+QString::number(a)+"张,"+"共"+QString::number(b)+"张");
}

(2)列表按钮:tool_button


列表按钮
void MainWindow::on_toolButton_clicked()
{
    ui->toolButton->setMenu(mu);    打开图片
    ui->toolButton->showMenu();
}
void MainWindow::on_toolButton_triggered(QAction *arg1)
{
    if(arg1->text()=="打开"){
        QString filename = QFileDialog::getOpenFileName(
                    this,
                    tr("打开图片"),
                    "/home",
                    tr("Images(*.jpg *.jpeg *.png *.bmp )"));

        定义一张图片
        QPixmap pic(filename);
        适应标签
        pic = pic.scaled(ui->label->width(),ui->label->height());
        把图片设置到标签列表中
        ui->listWidget->addItem(filename);
        把图片显示在标签中
        ui->label->setPixmap(pic);
        //ui->label->setText(filename);

    }else if(arg1->text()=="保存"){
QScreen *screen = QGuiApplication::primaryScreen();
        QString runPath = QCoreApplication::applicationDirPath();  获取当前文件的编译路径

          QString runPath = QFileDialog::getExistingDirectory(this, "choose src                     
                                       Directory", "E:/QT/Image");
        qDebug() << runPath;
        screen->grabWindow(ui->label->winId()).save(runPath);    保存在当前文件夹下
    }else if(arg1->text()=="另存为"){
        QString filename1 = QFileDialog::getSaveFileName(
                             this,
                             tr("Save Image"),
                             "",      选择路径
                             tr("Images (*.png *.bmp *.jpg *.jpeg)"));
            QScreen *screen = QGuiApplication::primaryScreen();
            screen->grabWindow(ui->label->winId()).save(filename1);
    }else{
        exit(0);
    }
}

(3)切换图片

上一张
void MainWindow::on_pushButton_clicked()
{
    --a;
    判断,如果是第一张的上一张,那么就是最后一张
    if(a<1) a=b+a;
    先停止计时器 最后再开始
    timer->stop();
    img->load("E:/QT/Image/"+QString::number(a)+".jpg");
    显示当前信息
    ui->label_2->setText("当前第"+QString::number(a)+"张,"+"共"+QString::number(b)+"张");
    label标签显示图片
    ui->label->setPixmap(QPixmap::fromImage(*img));
    timer->start(5000);
}

下一张
void MainWindow::on_pushButton_2_clicked()
{
    ++a;
    判断如果到了最后一张,那么下一张就是第一张
    if(a>b) a=1;
    先停止计时器 最后再开始
    timer->stop();
    img->load("E:/QT/Image/"+QString::number(a)+".jpg");
    显示当前信息
    ui->label_2->setText("当前为第"+QString::number(a)+"张,"+"共"+QString::number(b)+"张");
    label标签显示图片
    ui->label->setPixmap(QPixmap::fromImage(*img));
    timer->start(4000);
}

(4)自动播放和停播

自动播放
void MainWindow::on_pushButton_3_clicked()
{

    先停止计时器 最后再开始
    timer->stop();
    img->load("E:/QT/Image/"+QString::number(a)+".jpg");
    显示当前信息
    ui->label_2->setText("当前为第"+QString::number(a)+"张,"+"共"+QString::number(b)+"张");
    label标签显示图片
    ui->label->setPixmap(QPixmap::fromImage(*img));
    判断
    ++a; 
    if(a>b) a=1;
    timer->start(5000);
}

停止自动播放
void MainWindow::on_pushButton_4_clicked()
{
    timer->stop();
}

(5)放大,缩小,图片旋转

放大
QImage* imgScaled;    接收更改后的图片
int width1=0;    声明图片宽
int height1=0;    声明图片高
void MainWindow::on_pushButton_5_clicked()
{
    imgScaled = new QImage;
    width1 = img->width()+100;    宽加100像素
    height1 = img->height()+100;  高加100像素
    *imgScaled =img->scaled(width1,   显示宽长,避免关键字重名
                            height1,    显示高长
                            Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(*imgScaled));
}

缩小
void MainWindow::on_pushButton_6_clicked()
{
    imgScaled = new QImage;
    width1 = img->width()-100;
    height1 = img->height()-100;
    *imgScaled=img->scaled(width1,  显示宽长
                           height1, 显示高长
                           Qt::IgnoreAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(*imgScaled));
}

图片旋转
QMatrix matrix;
void MainWindow::on_pushButton_7_clicked()
{
    matrix.rotate(90);  旋转角度
    ui->label->setPixmap(QPixmap(QPixmap::fromImage(*img))    转换格式并显示图片
                         .transformed(matrix, Qt::SmoothTransformation));
}

总结:

1、还存在一些bug没修复,如:缩放次数为1。

2、还有编辑功能和图片切换风格和打开方式,视频播放等,待实现。

3、还不能播放文件名不连续,后缀不一样的图片。这点需要思考。

4、功能是基本完成了,也是个小作业,做了两天,调用的库是真的难,慢慢找方法,然后我发现把光标放在某类型上,然后按F1就可以查看它的帮助文档了!很方便。

补充更新:滑条放大缩小

QT图片浏览器制作QT图片浏览器制作文章来源地址https://www.toymoban.com/news/detail-497833.html

滑条放大缩小
void MainWindow::on_verticalSlider_valueChanged(int value)
{
    imgScaled = new QImage;
    width1 = img->width();
    height1 = img->height();
    *imgScaled=img->scaled(width1*value/10,  
                           height1*value/10,
                           Qt::IgnoreAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(*imgScaled));
}

到了这里,关于QT图片浏览器制作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • win10系统使用自带IE浏览器

    对于Win10系统,Microsoft仍然内置了IE(Internet Explorer)浏览器,用户可以直接使用。主要步骤如下: 1. 寻找IE浏览器图标。在Win10系统的任务栏或开始菜单中寻找IE浏览器的图标,双击打开。如果未显示图标,可以在开始菜单的“所有应用”中找到Internet Explorer并打开。 2. 首次运行配置。

    2024年02月11日
    浏览(54)
  • 一款可以完美替代浏览器自带起始页的新标签页插件:Wetab

    现在打开你们的浏览器,映入眼帘的是不是一片空白的自带起始页?或者是乱七八糟布满网站快捷方式的页面? Wetab新标签页是一款没有广告并且免费使用的浏览器插件,还原一个干净纯粹的浏览器体验。 本人已经被那些乱七八糟的起始页折磨许久了,直到后来看到了wetab这

    2024年02月06日
    浏览(94)
  • 查看edge浏览器插件的安装位置并将插件安装到别的浏览器

     C:Users zhang AppDataLocalMicrosoftEdgeUser DataDefaultExtensions    这是我的目录,把中间的的替换成你的电脑用户名就可以了 你也可以先输入目录的部分名称,下拉找对应的目录  将插件导出,导入到别的浏览器 以第一个插件  扩展管理器  为例,进入下一级子文件,找到插件

    2024年02月10日
    浏览(57)
  • Burp Suite 自带浏览器Burp‘s Browser(Chromium)沙盒sandbox问题的解决

    Burp Suite启动自带浏览器Burp’s Browser(Chromium)的时候,弹出does not support running without sandbox出错框。 解决方法,操作如下: Project options --Misc– Burp’s Browser -- Allow Burp’s browser to run without sandbox,勾选这个选项。

    2024年02月13日
    浏览(42)
  • video标签设置了autoplay,自带音频的视频在谷歌浏览器仍无法自动播放

    原因分析:谷歌浏览器可以自动播放视频,不能自动播放音频。如果视频中自带音频就会导致该视频无法自动播放。 解决办法:在video标签加上静音属性muted,自带音频的视频就可以自动播放了,但是该视频无声音。 备注:1、这是谷歌浏览器自身的问题。2、Safari浏览器可正

    2024年02月12日
    浏览(64)
  • 浏览器中怎样查看前后端传值

    路径:F12–Network --Fetch/XHR,选择一个接口地址。 在payload里面是前端发送给后端的参数。也即客户端发送给服务端的请求数据,即接口地址入参。 Preview和Response里都是后端返回给前端的。Preview是格式化过的,比较容易看。Response是一行过,一样的数值。

    2024年02月10日
    浏览(35)
  • 查看Andriod内置浏览器WebView版本

    查看Andriod内置浏览器WebView版本 方法一:手机上设置中查看 设置–应用程序管理–全部–Android System WebView 方法二:电脑Chome浏览器的devTools中查看 1、连接设备到电脑,打开Android设备的开发者模式,并勾选USB调试授权PC连接到Android设备。 2、在Chrome浏览器打开:chrome://inspect/

    2024年02月06日
    浏览(40)
  • 谷歌浏览器如何查看cookie存放信息

    Cookie,有时也用其复数形式 Cookies。类型为“ 小型文本文件 ”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。下面以谷歌游览器查看cookie为例 谷歌浏览器查看cookie 1.打开谷歌游

    2024年02月05日
    浏览(47)
  • QT 浏览器组件使用

     1. Qt4中使用webkit模块;   2. Qt5 ~Qt5.5使用webkitwidgets模块,使用WebKit作为后端;   3. Qt5.6以上版本使用webenginewidgets模块,使用Chromium作为后端。QT5.6之后开始支持 这里一定要指定msvc2017(或者msvc2019都可以) 64编译器,如果指定minGW依然会报错,因为MinGW不支持QWebEngine,如果QT中msv

    2024年01月22日
    浏览(82)
  • 开源python双屏图片浏览器软件

    需要安装pyqt5这个库

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包