最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用QT實(shí)現(xiàn)圖片瀏覽器的示例詳解

 更新時(shí)間:2023年02月23日 15:32:41   作者:音視頻開發(fā)老舅  
這篇文章主要和大家分享一個(gè)小案例:利用QT制作一個(gè)小的圖片瀏覽器,要求可以顯示jpg、jpeg、png、bmp,還可以從電腦上拖動(dòng)圖到窗口并顯示出來,感興趣的可以了解一下

1、概述

案例:制作一個(gè)小的圖片瀏覽器,要求可以顯示jpg、jpeg、png、bmp??梢詮碾娔X上拖動(dòng)圖到窗口并顯示出來?!?/p>

實(shí)現(xiàn)步驟:

1.創(chuàng)建一個(gè)QWidget

2.在QWidget的構(gòu)造方法中設(shè)置一個(gè)QLabel用戶顯示pixmap

3.在QWidget的protected中定義三個(gè)函數(shù),dragEnterEvent(QDragEnterEvent *event)、dropEvent(QDropEvent *event)、resizeEvent(QResizeEvent *event);并在.cpp中實(shí)現(xiàn)這三個(gè)方法

4.在QWidget的構(gòu)造函數(shù)中加入setAccessDrop(true),設(shè)置可向窗口拖拽內(nèi)容

5.實(shí)現(xiàn)dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口重置)

6.實(shí)現(xiàn)第5步的三個(gè)方法

7.在drawEnterEvent中過濾可拖拽的文件

void watershedwindow::dragEnterEvent(QDragEnterEvent *event){
    QStringList acceptedFileTypes;
    acceptedFileTypes.append("jpg");
    acceptedFileTypes.append("jpeg");
    acceptedFileTypes.append("bmp");
    acceptedFileTypes.append("png");
    if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){
        QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
        if(acceptedFileTypes.contains(file.suffix().toLower())){
            event->acceptProposedAction();//表明用戶可以在窗口部件上拖放對(duì)象
        }
    }
}

8.在dropEvent方法中實(shí)現(xiàn)文件拖拽放下后的情況,即顯示圖片

void watershedwindow::dropEvent(QDropEvent *event){
    QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
    if(pixmap.load(file.absoluteFilePath())){
        label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    }else{
        QMessageBox::critical(this,tr("Error"),tr("The image file count not be read"));
    }
}

9.resizeEvent方法中對(duì)圖像進(jìn)行重置

void watershedwindow::resizeEvent(QResizeEvent *event){
    Q_UNUSED(event);
    if(!pixmap.isNull()){
        label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    }
 
}

10.結(jié)束

ps:下面是完整代碼

2、代碼示例

#include "opencv2/opencv.hpp"
#include <QWidget>
#include <QSize>
#include <iostream>
#include <QPixmap>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QFileInfo>
#include <QMessageBox>
#include <QResizeEvent>
#include <QStringList>
#include <QLabel>
 
using namespace cv;
using namespace std;
 
class watershedwindow : public QWidget
{
    Q_OBJECT
private:
    Mat src,gray,result,distanceImage;
    QPixmap pixmap;
    QLabel *label;
public:
    explicit watershedwindow(QWidget *parent = nullptr);protected:
    /**
     * 拖進(jìn)事件
     * @brief dragEnterEvent
     * @param event
     */
    void dragEnterEvent(QDragEnterEvent *event);
    /**
     * 拖進(jìn)放下事件
     * @brief dropEvent
     * @param event
     */
    void dropEvent(QDropEvent *event) ;
    void resizeEvent(QResizeEvent *event);
 
signals:
 
};
#include "watershedwindow.h"
 
watershedwindow::watershedwindow(QWidget *parent) : QWidget(parent)
{
    this->setAcceptDrops(true);//設(shè)置允許向窗口拖入圖片
    this->setFixedSize(QSize(320,480));
    label = new QLabel(this);
    label->setFixedSize(this->width(),this->height());
}
 
 
void watershedwindow::dragEnterEvent(QDragEnterEvent *event){
    QStringList acceptedFileTypes;
    acceptedFileTypes.append("jpg");
    acceptedFileTypes.append("jpeg");
    acceptedFileTypes.append("bmp");
    acceptedFileTypes.append("png");
    if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){
        QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
        if(acceptedFileTypes.contains(file.suffix().toLower())){
            event->acceptProposedAction();//表明用戶可以在窗口部件上拖放對(duì)象
        }
    }
}
 
 
void watershedwindow::dropEvent(QDropEvent *event){
    QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
    if(pixmap.load(file.absoluteFilePath())){
        label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    }else{
        QMessageBox::critical(this,tr("Error"),tr("The image file count not be read"));
    }
}
 
 
void watershedwindow::resizeEvent(QResizeEvent *event){
    Q_UNUSED(event);
    if(!pixmap.isNull()){
        label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    }
 
}
}

3、演示圖片

到此這篇關(guān)于利用QT實(shí)現(xiàn)圖片瀏覽器的示例詳解的文章就介紹到這了,更多相關(guān)QT圖片瀏覽器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Trae+Qt+MSVC環(huán)境配置的實(shí)現(xiàn)示例

    Trae+Qt+MSVC環(huán)境配置的實(shí)現(xiàn)示例

    本文主要介紹了Trae+Qt+MSVC環(huán)境配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 用C語言實(shí)現(xiàn)貪吃蛇小游戲

    用C語言實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++實(shí)現(xiàn)LeetCode(47.全排列之二)

    C++實(shí)現(xiàn)LeetCode(47.全排列之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(47.全排列之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 詳解C++基礎(chǔ)——類繼承中方法重載

    詳解C++基礎(chǔ)——類繼承中方法重載

    這篇文章主要介紹了C++基礎(chǔ)——類繼承中方法重載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++ 中

    C++ 中"priority_queue" 優(yōu)先級(jí)隊(duì)列實(shí)例詳解

    這篇文章主要介紹了C++ 中"priority_queue" 優(yōu)先級(jí)隊(duì)列實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Qt使用OpenGL實(shí)現(xiàn)繪制3D圖形

    Qt使用OpenGL實(shí)現(xiàn)繪制3D圖形

    OpenGL是一個(gè)跨平臺(tái)的、用來渲染3D圖形的標(biāo)準(zhǔn)API,Qt對(duì)OpenGL提供了強(qiáng)大的支持,所以本文就來和大家介紹一下Qt如何使用OpenGL實(shí)現(xiàn)繪制3D圖形吧
    2023-10-10
  • C/C++實(shí)現(xiàn)快速排序算法的思路及原理解析

    C/C++實(shí)現(xiàn)快速排序算法的思路及原理解析

    這篇文章主要介紹了C/C++實(shí)現(xiàn)快速排序算法的思路及原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • MFC實(shí)現(xiàn)字幕滾動(dòng)效果

    MFC實(shí)現(xiàn)字幕滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了MFC實(shí)現(xiàn)滾動(dòng)字幕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    這篇文章主要介紹了C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法,結(jié)合實(shí)例形式分析了C++遞歸函數(shù)與逆序棧的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • c++ 防止頭文件重復(fù)引入的三種方法

    c++ 防止頭文件重復(fù)引入的三種方法

    這篇文章主要介紹了c++ 防止頭文件重復(fù)引入的三種方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02

最新評(píng)論

通许县| 乡城县| 台山市| 托克托县| 邻水| 辽阳县| 萝北县| 临沂市| 红原县| 涪陵区| 安福县| 竹溪县| 新兴县| 巩义市| 辛集市| 金阳县| 句容市| 佛坪县| 成武县| 板桥市| 海原县| 湖南省| 井陉县| 西华县| 册亨县| 宝清县| 秭归县| 增城市| 双柏县| 勃利县| 临邑县| 崇阳县| 新宁县| 邓州市| 孟津县| 丹江口市| 托克逊县| 历史| 沈阳市| 石台县| 雷山县|