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

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

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

1、概述

案例:制作一個(gè)小的圖片瀏覽器,要求可以顯示jpg、jpeg、png、bmp??梢詮碾娔X上拖動(dòng)圖到窗口并顯示出來(lái)?!?/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中過(guò)濾可拖拽的文件

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)境配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 用C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲

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

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

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

    這篇文章主要介紹了C++基礎(chǔ)——類繼承中方法重載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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)的、用來(lái)渲染3D圖形的標(biāo)準(zhǔn)API,Qt對(duì)OpenGL提供了強(qiáng)大的支持,所以本文就來(lái)和大家介紹一下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)論

开封市| 灵武市| 宁阳县| 南宁市| 和龙市| 建昌县| 虹口区| 定远县| 亳州市| 襄垣县| 灌云县| 鲜城| 永清县| 平湖市| 太原市| 桦川县| 突泉县| 浦江县| 兴化市| 南宁市| 贺州市| 中阳县| 二连浩特市| 象州县| 涿鹿县| 讷河市| 澄迈县| 青铜峡市| 中江县| 淮安市| 万山特区| 临颍县| 贞丰县| 河北区| 太仓市| 鲁山县| 蒙自县| 馆陶县| 桦甸市| 调兵山市| 休宁县|