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

QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

 更新時間:2023年04月25日 16:00:32   作者:戀戀西風  
這篇文章主要介紹了如何利用QT編寫一個圖片瀏覽系統(tǒng),可以支持自動播放,左右拖動切換,點擊列表切換,點擊按鈕切換等功能,感興趣的小伙伴可以跟隨小編一起了解一下

引言

本系統(tǒng)支持,自動播放,左右拖動切換,點擊列表切換,點擊按鈕切換;是一個標準的圖像瀏覽軟件。

Windows 圖片瀏覽器,可以查看當前文件夾下的圖片,往上翻、往下翻并且自動播放;

此系統(tǒng)增加一個列表;

實現(xiàn)功能

1.瀏覽電腦里的文件夾,將當前文件夾下的圖片列表羅列出來;

2.鼠標點擊列表上的某一張圖片,圖片將顯示出來;

3.可以控制瀏覽當前圖片的上一張和下一張;

4.實現(xiàn)鼠標拖動圖片,左劃,右劃切換圖片;

5.實現(xiàn)自動播放的開始和停止控制。

效果

實現(xiàn)圖片瀏覽所用知識

包括窗口部件、布局、事件、對象模型與容器類、圖形視圖、模型/視圖編程以及多線程等。

實現(xiàn)流程

1.定義一個圖片類,該類包含圖片的路徑、文件名、文件id以及獲取這些變量的函數(shù)。

2. 主要包含添加圖像以及獲取所有圖像以及新加入圖像的函數(shù)。

3.最后通過將圖片名字加入到界面左側QDockWidget部件中的QTreeView中,

4.通過雙擊可查看完整圖片,以及通過滾輪和鼠標等事件來對圖片進行一些操作。 

實現(xiàn)環(huán)境和UI設計

環(huán)境:VS2017 + Qt5.12.4

具體實現(xiàn)

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QListWidget>
#include <QMainWindow>
#include <QTimer>
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_btnOpen_clicked();
 
    void on_listWidget_itemClicked(QListWidgetItem *item);
 
    void MyFunction();
    void on_pushButton_clicked();
 
    void on_btnLast_clicked();
 
    void on_btnNext_clicked();
 
protected:
    bool eventFilter(QObject *watch, QEvent *evn);
 
    QStringList getFileNames(const QString &path);
private:
    Ui::MainWindow *ui;
 
    QVector<QString> mListPath;
    QTimer mTimer;
    int index ;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QFileInfoList>
#include <QString>
#include <QDir>
#include <QMessageBox>
#include <QImage>
#include "qevent.h"
#include <QDebug>
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    index =0;
    mTimer.setInterval(1000);
    connect(&mTimer,SIGNAL(timeout()),this,SLOT(MyFunction()));
    on_btnOpen_clicked();
    mTimer.start(1000);
    ui->btnOpen->setVisible(false);
   // ui->pushButton->setVisible(false);
    this->installEventFilter(this);
 
    this->setWindowTitle("圖片瀏覽器");
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::MyFunction()
{
    if (index == 5) {
        index = 0;
    } else {
        index++;
    }
    if (index == 5) {
        index = 0;
    }
 
    // this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));
     QString strIndex = mListPath.at(index);
 
      qDebug()<<"index "<<QString::number(index)<<"strIndex "<<strIndex;
      QDir filePath(ui->inputDirPath->text());
 
    QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}
void MainWindow::on_btnOpen_clicked()
{
 
   QString filePath = QCoreApplication::applicationDirPath()+"/pic";
   ui->inputDirPath->setText(filePath);
  // QMessageBox::information(this,"提示!",filePath);
    QDir dir(filePath);
    // 判斷文件夾是否存在
    if(dir.exists()){
        ui->listWidget->clear();
        QFileInfoList info_list = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
        for(int i =0;i<info_list.count();i++){
            ui->listWidget->addItem(info_list.at(i).fileName());
 
            mListPath.push_back(info_list.at(i).fileName());
        }
 
 
    }
    else{
        QMessageBox::information(this,"提示!","文件夾不存在");
    }
 
}
QStringList MainWindow::getFileNames(const QString &path)
{
    QDir dir(path);
    QStringList nameFilters;
    nameFilters << "*.jpg" << "*.png";
    QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
    return files;
}
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    if(mTimer.isActive())
      mTimer.stop();
    QDir filePath(ui->inputDirPath->text());
 
    QString fullName = filePath.absoluteFilePath(item->text());
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
 
 
}
//點擊事件函數(shù)
bool MainWindow::eventFilter(QObject *watch, QEvent *evn)
{
    static int press_x;     //點擊鼠標時獲取的橫坐標x
    static int press_y;     //點擊鼠標時獲取的縱坐標y
    static int relea_x;     //松開鼠標時獲取的橫坐標x
    static int relea_y;     //松開鼠標時獲取的縱坐標y
 
    QMouseEvent *event = static_cast<QMouseEvent *>(evn);       //將圖片QT QEvent 轉(zhuǎn)換為 QMouseEvent ,QKeyEvent....等子類
    //獲取點擊鼠標(手指)時的坐標
    if (event->type() == QEvent::MouseButtonPress)
    {
            press_x = event->globalX();
            press_y = event->globalY();
    }
    //獲取松開鼠標(手指)時的坐標
    if(event->type() == QEvent::MouseButtonRelease)
    {
        relea_x = event->globalX();
        relea_y = event->globalY();
 
 
    }
    //對鼠標(手指)滑動的方向進行判斷(右滑)
    if((relea_x - press_x) > 5 && event->type() == QEvent::MouseButtonRelease && qAbs(relea_y - press_y) < 50)
    {
       on_btnNext_clicked();
    }
if( event->type() == QEvent::MouseButtonRelease)
     qDebug()<<"releax "<<QString::number(press_x - relea_x)<<"releay "<<QString::number(relea_y - press_y);
    //對鼠標(手指)滑動的方向進行判斷(左滑)
    if((press_x - relea_x) > 5 && event->type() == QEvent::MouseButtonRelease && qAbs(relea_y - press_y) < 50)
    {
       on_btnLast_clicked();
    }
 
    return QWidget::eventFilter(watch, evn);
}
 
 
 
 
void MainWindow::on_pushButton_clicked()
{
    if(ui->pushButton->text()=="滑動切換")
    {
        ui->pushButton->setText("自動播放");
        if(mTimer.isActive())
          mTimer.stop();
    }
    else
    {
        ui->pushButton->setText("滑動切換");
        if(!mTimer.isActive())
          mTimer.start();
    }
}
 
void MainWindow::on_btnLast_clicked()
{
    if(index == -1)
    {
        index = 4;
    }
    else
    {
        index--;
    }
 
    if(index == -1)
    {
        index = 4;
    }
  //  this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));
    QString strIndex = mListPath.at(index);
 
     qDebug()<<"index 111"<<QString::number(index)<<"strIndex "<<strIndex;
     QDir filePath(ui->inputDirPath->text());
 
     QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}
 
void MainWindow::on_btnNext_clicked()
{
    if (index == 5) {
        index = 0;
    } else {
        index++;
    }
    if (index == 5) {
        index = 0;
    }
 
    // this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));        //切換圖片
     QString strIndex = mListPath.at(index);
 
      qDebug()<<"index "<<QString::number(index)<<"strIndex "<<strIndex;
      QDir filePath(ui->inputDirPath->text());
 
      QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}

到此這篇關于QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)的文章就介紹到這了,更多相關QT圖片瀏覽系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Opencv開發(fā)實現(xiàn)拼圖游戲

    Opencv開發(fā)實現(xiàn)拼圖游戲

    這篇文章主要為大家詳細介紹了Opencv開發(fā)實現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++基本組件之內(nèi)存池詳解

    C++基本組件之內(nèi)存池詳解

    這篇文章主要為大家詳細介紹了C++中的基本組件——內(nèi)存池的相關知識,文中的示例代碼講解詳細,對我們學習C++有一定的幫助,需要的可以參考一下
    2023-03-03
  • C語言實現(xiàn)井字棋游戲

    C語言實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C語言超細致講解循環(huán)語句

    C語言超細致講解循環(huán)語句

    我們說到當滿足特定條件時,就會執(zhí)行if語句或者switch語句后面的語句,否則不執(zhí)行,但是這只能執(zhí)行一次,在日常生活中,有些事情是需要重復去做的,C語句就為此引入了循環(huán)語句。所以今天繼續(xù)為大家分享C語言循環(huán)家族
    2022-05-05
  • C++四種case的詳細介紹小結

    C++四種case的詳細介紹小結

    本文主要介紹了C++四種case的詳細介紹小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C++生成隨機浮點數(shù)的示例代碼

    C++生成隨機浮點數(shù)的示例代碼

    在C++11之前,我們通常采用rand函數(shù)來生成隨機數(shù),但rand函數(shù)對一些情況顯得難以處理。本文將介紹如何利用C++生成隨機浮點數(shù),需要的可以參考一下
    2022-04-04
  • 通過GDB學習C語言的講解

    通過GDB學習C語言的講解

    今天小編就為大家分享一篇關于通過GDB學習C語言的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C++11中模板隱式實例化與顯式實例化的定義詳解分析

    C++11中模板隱式實例化與顯式實例化的定義詳解分析

    實例化是為在程序中的函數(shù)模板本身并不會生成函數(shù)定義,它只是一個用于生成函數(shù)定義的方案。編譯器使用模板為特定類型生成函數(shù)定義時,得到的是模板實例。這即是函數(shù)模板的實例化。而函數(shù)模板實例化又分為兩種類型:隱式實例化和顯式實例化
    2022-04-04
  • 詳解C++14中返回類型推導的使用

    詳解C++14中返回類型推導的使用

    這篇文章主要為大家詳細介紹了C++14中返回類型推導的使用,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-07-07
  • C語言 if else 語句詳細講解

    C語言 if else 語句詳細講解

    本文主要介紹C語言中的if else,這里詳細介紹了if else 語句并提供了簡單的示例代碼,希望能幫助編程入門的小伙伴學習
    2016-07-07

最新評論

新竹县| 南京市| 新闻| 舞钢市| 布拖县| 夹江县| 奉节县| 克拉玛依市| 上虞市| 余庆县| 富平县| 富源县| 海口市| 拜泉县| 门头沟区| 昔阳县| 铜鼓县| 林州市| 报价| 宾阳县| 津南区| 洛川县| 宁波市| 仙游县| 吕梁市| 南华县| 留坝县| 福建省| 汉沽区| 汝南县| 武城县| 乐都县| 星子县| 尖扎县| 霍州市| 钟祥市| 昌平区| 浮梁县| 大渡口区| 桂林市| 汉中市|