91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用QT實現圖片瀏覽器

發布時間:2023-02-23 16:35:00 來源:億速云 閱讀:144 作者:iii 欄目:開發技術

這篇文章主要介紹了如何利用QT實現圖片瀏覽器的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何利用QT實現圖片瀏覽器文章都會有所收獲,下面我們一起來看看吧。

1、概述

案例:制作一個小的圖片瀏覽器,要求可以顯示jpg、jpeg、png、bmp。可以從電腦上拖動圖到窗口并顯示出來。 

實現步驟:

1.創建一個QWidget

2.在QWidget的構造方法中設置一個QLabel用戶顯示pixmap

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

4.在QWidget的構造函數中加入setAccessDrop(true),設置可向窗口拖拽內容

5.實現dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口重置)

6.實現第5步的三個方法

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();//表明用戶可以在窗口部件上拖放對象
        }
    }
}

8.在dropEvent方法中實現文件拖拽放下后的情況,即顯示圖片

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方法中對圖像進行重置

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

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:
    /**
     * 拖進事件
     * @brief dragEnterEvent
     * @param event
     */
    void dragEnterEvent(QDragEnterEvent *event);
    /**
     * 拖進放下事件
     * @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);//設置允許向窗口拖入圖片
    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();//表明用戶可以在窗口部件上拖放對象
        }
    }
}
 
 
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));
    }
 
}
}

關于“如何利用QT實現圖片瀏覽器”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何利用QT實現圖片瀏覽器”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

黔江区| 策勒县| 高台县| 新晃| 乌鲁木齐市| 荆州市| 钟山县| 诸暨市| 永胜县| 邢台县| 荔浦县| 香格里拉县| 北安市| 德州市| 商水县| 阳西县| 巫山县| 安乡县| 沂源县| 竹山县| 马鞍山市| 郎溪县| 梅河口市| 克东县| 麟游县| 宝鸡市| 大邑县| 双鸭山市| 宜川县| 罗江县| 陈巴尔虎旗| 连云港市| 体育| 福州市| 蓝田县| 吉水县| 黄陵县| 张家口市| 夏邑县| 贵定县| 永昌县|