亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

QT實現(xiàn)制作一個ListView列表的示例代碼

 更新時間:2023年02月23日 16:43:56   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細介紹了如何使用Qt制作一個ListView,點擊ListView的Item可以用于測試OpenCV的各種效果,感興趣的小伙伴可以了解一下

1、概述

案例:使用Qt制作一個ListView。點擊ListView的Item可以用于測試OpenCV的各種效果

自定義一個:MainListView繼承QListWidget 、MainListViewItem繼承QListWidgetItem

2、代碼示例

1.自定義QListWidget

mainlistview.h

class MainListView : public QListWidget
{
    Q_OBJECT
public:
    explicit MainListView(QWidget *parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void leaveEvent(QEvent *event);
private:
    QPoint startPoint;
    MainListViewItem *theHighlightItem = nullptr;
    MainListViewItem *oldHighlightItem = nullptr;
    MainListViewItem *theSelectedItem = nullptr;
    MainListViewItem *oldSelectedItem = nullptr;
    Chapter3Option * option = new Chapter3Option();
 
 
signals:
 
 
public slots:
    void updateSelectedIcon();
    void onMainItemClick(QListWidgetItem *item);
};

mainlistview.cpp

#include "mainlistview.h"
 
MainListView::MainListView(QWidget *parent) : QListWidget(parent)
{
    setMouseTracking(true);
    //連接信號與槽函數(shù),如果選中項發(fā)生變化則觸發(fā)item圖標的更新.都是當前對象發(fā)生
    connect(this,&MainListView::itemSelectionChanged,this,&MainListView::updateSelectedIcon);
    connect(this,&MainListView::itemClicked,this,&MainListView::onMainItemClick);
}
 
/**
 * 處理鼠標hove事件,item圖標就變成hove狀態(tài)
 * @brief MainListView::mouseMoveEvent
 * @param event
 */
void MainListView::mouseMoveEvent(QMouseEvent *event){
    oldHighlightItem = theHighlightItem;
    theHighlightItem = static_cast<MainListViewItem *>(itemAt(event->pos()));
    //舊的hover的item圖標回復原狀(條件是該item沒有被選中)
    //新的hover的iten圖標變成hover狀態(tài)(條件是該item沒有被選中)
    if(oldHighlightItem != theHighlightItem){
       if(oldHighlightItem && !oldHighlightItem->isSelected()) oldHighlightItem->setIcon(oldHighlightItem->mIcon);
       if(theHighlightItem && !theHighlightItem->isSelected()) theHighlightItem->setIcon(theHighlightItem->mIconHover);
    }
}
 
/**
 * 鼠標按下(這個可以當做item的點擊事件,能夠正常執(zhí)行)
 * @brief MainListView::mousePressEvent
 * @param event
 */
void MainListView::mousePressEvent(QMouseEvent *event){
    if(event->buttons()&Qt::LeftButton){
        startPoint = event->pos();
        MainListViewItem *item = static_cast<MainListViewItem *>(itemAt(event->pos()));
        QString filePath = QFileDialog::getOpenFileName(this, tr("選擇視頻"), "C:\\Users\\wei.yang\\Downloads\\opencv_res", tr("Image Files(*.jpg *.png)"));
        const char *fileRealPath = filePath.toStdString().c_str();//將QString轉(zhuǎn)換為char*
        qDebug() <<item->text()<<"--->"<<fileRealPath<<"--->pos:"<<item->mPos;
        switch (item->mPos) {
        case 1://顯示原圖
            option->showSrcImage(fileRealPath);
            break;
        case 2://像素取反
            option->pixleReverse(fileRealPath);
            break;
        case 3://圖像融合
            option->imageFuse("","");
            break;
        case 4://調(diào)整圖像亮度及對比度
            option->increaseBrightnessContrastRatio(fileRealPath);
            break;
        case 5://繪制線、矩形、橢圓、圓、多邊形、文本
            option->drawShape();
            break;
        case 6://均值模糊:用于圖像的降噪
            option->showBlur(fileRealPath);
            break;
        case 7://高斯模糊:用于圖像的降噪,其對自然界的噪聲有很好的抑制作用
            option->showGaussianBlue(fileRealPath);
            break;
        case 8://中值濾波:終止濾波用于圖像的降噪,其對椒鹽噪聲有很好的抑制作用(黑白點)
            option->showMediaBlur(fileRealPath);
            break;
        case 9://雙邊濾波:其可以很好的保留邊緣的同時對平坦區(qū)域進行降噪
            option->showBilateralFilter(fileRealPath);
            break;
        case 10://提起圖像中的英文字母
             option->showCleanImage(fileRealPath);
            break;
        case 11://形態(tài)學開操作
            option->showImageOpen(fileRealPath);
            break;
        case 12:// 形態(tài)學閉操作
            option->showImageClose(fileRealPath);
            break;
        case 13://形態(tài)學梯度(基本梯度):膨脹減去腐蝕
             option->showMorphologicalGradient(fileRealPath);
            break;
        case 14://頂帽操作:相當于原圖像與開操作之間的差值圖像
             option->showTopHat(fileRealPath);
            break;
        case 15://黑帽操作:相當于原圖像與閉操作之間的差值圖像
             option->showBlackHat(fileRealPath);
            break;
        case 16://小案例:提取提取項目中的字母或者直線
             option->showLines(fileRealPath,0);
            break;
        case 17://上采樣:利用拉普拉斯金字塔進行圖像重建
            option->showPyrUp(fileRealPath);
            break;
        case 18://降采樣:利用高斯金字塔進行降采樣
             option->showPyrDown(fileRealPath);
            break;
        case 19://高斯不同:把同一張圖片再不同的參數(shù)下做高斯模糊之后的結(jié)果相減,得到的輸出圖像稱為高斯不同
            option->showGaussianDiff(fileRealPath);
            break;
        case 20://使用自定義卷積核filter2D
             option->showCustomKernelFilter2D(fileRealPath,1);
            break;
        case 21://1.合并rebort和sobel的x方向梯度和y方向的梯度
             option->showCustomKernelFilter2DMergeXY(fileRealPath);
            break;
        case 22://填充圖像邊緣
            option->showCopyMakeBorder(fileRealPath);
            break;
        case 23://使用Sobel和Scharr計算圖形梯度
            option->showSobelAndScharr(fileRealPath);
            break;
        case 24://使用拉普拉斯算子顯示梯度圖像
             option->showLaplacian(fileRealPath);
            break;
        case 25://邊緣檢測
            option->showCanny(fileRealPath);
            break;
        }
    }
}
 
/**
 * 釋放鼠標
 * @brief MainListView::mouseReleaseEvent
 * @param event
 */
void MainListView::mouseReleaseEvent(QMouseEvent *event){
    //如果鼠標釋放位置和單擊位置相距超過5像素,則不會觸發(fā)item選中
    if((event->pos() - startPoint).manhattanLength() > 5) return;
    MainListViewItem *item = static_cast<MainListViewItem *>(itemAt(event->pos()));
    setCurrentItem(item);
 
}
/**
 * 處理鼠標離開后,hover圖標回復正常狀態(tài)
 * @brief MainListView::leaveEvent
 * @param event
 */
void MainListView::leaveEvent(QEvent *event){
    Q_UNUSED(event);
    oldHighlightItem = theHighlightItem;
    if(oldHighlightItem && !oldHighlightItem->isSelected()) oldHighlightItem->setIcon(oldHighlightItem->mIcon);
    oldHighlightItem = theHighlightItem = nullptr;
 
}
 
void MainListView::updateSelectedIcon(){
    oldSelectedItem = theSelectedItem;
    theSelectedItem = static_cast<MainListViewItem *>(currentItem());
 
    //之前被選中的item圖標回復原樣
    //新被選中的item圖標變成hover狀態(tài)
    if(oldSelectedItem != theSelectedItem){
        if(oldSelectedItem) oldSelectedItem->setIcon(oldSelectedItem->mIcon);
        if(theSelectedItem) theSelectedItem->setIcon(theSelectedItem->mIconHover);
    }
}
 
 
//這個槽函數(shù)并沒有執(zhí)行
void MainListView::onMainItemClick(QListWidgetItem *item){
    qDebug() << "點擊了item的項目";
}

2.自定義QListWidgetItem

mainlistviewitem.h

class MainListViewItem : public QListWidgetItem
{
     //Q_OBJECT  //由于QListWidgetItem沒有QObject屬性,所以Q_OBJECT需要注釋掉
public:
    explicit MainListViewItem(QString itemTitle,const QIcon &icon, const QIcon &iconHover,int pos,QListWidget *parent = nullptr);
    /**
     * 設(shè)置item的圖標
     * @brief setItemIcon
     * @param icon
     * @param iconHover
     */
//    void setItemIcon(const QIcon &icon,const QIcon &iconHover);
public:
    QIcon mIcon;//默認圖標
    QIcon mIconHover;//選中時圖標
    int mPos;//第一個編輯
 
signals:
 
};

mainlistviewitem.cpp

#include "mainlistviewitem.h"
 
/**
 * 自定義主頁ListView的Item項
 * @brief MainListViewItem::MainListViewItem
 * @param parent
 */
MainListViewItem::MainListViewItem(QString itemTitle,const QIcon &icon, const QIcon &iconHover,int pos,QListWidget *parent) : QListWidgetItem(parent)
{
    setText(itemTitle);
    mIcon = icon;
    mIconHover = iconHover;
    setIcon(mIcon);
    setSizeHint(QSize(360,47));
    mPos = pos;
}

3.使用

void MainWindow::createListView(QWidget *parent){
    listView = new MainListView(this);
    listView->setFocusPolicy(Qt::NoFocus);  //這樣可禁用tab鍵和上下方向鍵并且除去復選框
    listView->setFixedHeight(320);
    listView->setFont(QFont("宋體", 14, QFont::DemiBold));
    listView->setFixedSize(QSize(360,480));
    listView->move(0,menuBar()->height());
    listView->setStyleSheet(
                "{outline:0px;}"  //除去復選框
                "MainListViewItem{background:rgb(245, 245, 247); border:0px; margin:0px 0px 0px 0px;}"
                "MainListViewItem::Item{height:40px; border:0px; padding-left:14px; color:rgba(200, 40, 40, 255);}"
                "MainListViewItem::Item:hover{color:rgba(40, 40, 200, 255);}"
                "MainListViewItem::Item:selected{background:rgb(230, 231, 234); color:rgba(40, 40, 200, 255); border-left:4px solid rgb(180, 0, 0);}"
                "QListWidget::Item:selected:active{background:rgb(230, 231, 234); color:rgba(40, 40, 200, 255); border-left:4px solid rgb(180, 0, 0);}");
 
    new MainListViewItem("顯示原圖",QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),1,listView);
    new MainListViewItem(tr("像素取反"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),2,listView);
    new MainListViewItem(tr("圖像融合"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),3,listView);
    new MainListViewItem(tr("調(diào)整圖像亮度及對比度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),4,listView);
    new MainListViewItem(tr("繪制線、矩形、橢圓、圓、多邊形、文本"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),5,listView);
    new MainListViewItem(tr("均值模糊"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),6,listView);
    new MainListViewItem(tr("高斯模糊"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),7,listView);
    new MainListViewItem(tr("中值濾波"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),8,listView);
    new MainListViewItem(tr("雙邊濾波"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),9,listView);
    new MainListViewItem(tr("提取圖像中的英文字母"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),10,listView);
    new MainListViewItem(tr("形態(tài)學開操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),11,listView);
    new MainListViewItem(tr("形態(tài)學閉操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),12,listView);
    new MainListViewItem(tr("形態(tài)學梯度(基本梯度)"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),13,listView);
    new MainListViewItem(tr("頂帽操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),14,listView);
    new MainListViewItem(tr("黑帽操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),15,listView);
    new MainListViewItem(tr("小案例:提取提取項目中的字母或者直線"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),16,listView);
    new MainListViewItem(tr("上采樣"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),17,listView);
    new MainListViewItem(tr("降采樣"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),18,listView);
    new MainListViewItem(tr("高斯不同"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),19,listView);
    new MainListViewItem(tr("使用自定義卷積核filter2D"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),20,listView);
    new MainListViewItem(tr("合并rebort及Sobel的x方向梯度和y方向的梯度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),21,listView);
    new MainListViewItem(tr("填充圖像邊緣"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),22,listView);
    new MainListViewItem(tr("使用Sobel和Scharr計算圖形梯度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),23,listView);
    new MainListViewItem(tr("使用拉普拉斯算子顯示梯度圖像"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),24,listView);
    new MainListViewItem(tr("邊緣檢測"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),25,listView);
 
//    connect(listView,&MainListView::itemClicked,listView,&MainListView::onMainItemClick);
}
//最后一步:創(chuàng)建ListView,然后運行就行了
 createListView(this);

3、圖片演示

到此這篇關(guān)于QT實現(xiàn)制作一個ListView列表的示例代碼的文章就介紹到這了,更多相關(guān)QT制作ListView列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言+MySQL實現(xiàn)推箱子游戲

    C語言+MySQL實現(xiàn)推箱子游戲

    經(jīng)典的推箱子是一個來自日本的古老游戲,目的是在訓練你的邏輯思考能力。本文將通過C語言和MySQL實現(xiàn)推箱子這一經(jīng)典游戲,感興趣的可以了解一下
    2022-02-02
  • C語言庫的封裝和使用方法總結(jié)

    C語言庫的封裝和使用方法總結(jié)

    在編程的過程中,使用已經(jīng)封裝好的庫函數(shù)是十分方便的,也是十分高效的,這篇文章主要給大家介紹了關(guān)于C語言庫的封裝和使用的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 嵌入式C語言查表法在項目中的應(yīng)用

    嵌入式C語言查表法在項目中的應(yīng)用

    今天小編就為大家分享一篇關(guān)于嵌入式C語言查表法在項目中的應(yīng)用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言:代碼宏詳解

    C語言:代碼宏詳解

    這篇文章主要介紹了 C語言宏定義使用實例詳解的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C語言實現(xiàn)個人財務(wù)管理

    C語言實現(xiàn)個人財務(wù)管理

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)個人財務(wù)管理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C/C++中的OpenCV讀取視頻與調(diào)用攝像頭

    C/C++中的OpenCV讀取視頻與調(diào)用攝像頭

    這篇文章主要介紹了C/C++中的OpenCV讀取視頻與調(diào)用攝像頭,具有很好的參考價值,希望對大家有所幫助。
    2022-11-11
  • C語言編程const遇上指針分析

    C語言編程const遇上指針分析

    本篇文章是C語言編程篇,主要為大家介紹C語言編程中當Const遇上指針的分析講解,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • C++中protobuf?的交叉編譯使用詳解

    C++中protobuf?的交叉編譯使用詳解

    為了提高通信效率,可以采用?protobuf?替代?XML?和?Json?數(shù)據(jù)交互格式,protobuf?相對來說數(shù)據(jù)量小,在進程間通信或者設(shè)備之間通信能夠提高通信速率。下面介紹?protobuf?在?ARM?平臺上的使用,需要的朋友可以參考下
    2022-07-07
  • ?C++?new?和?delete?關(guān)鍵字詳解

    ?C++?new?和?delete?關(guān)鍵字詳解

    這篇文章主要介紹了?C++?new?和?delete?關(guān)鍵字詳解,文章圍繞主題展開new?和?delete?的使用方法的介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • C++與Lua交互內(nèi)存分配詳解

    C++與Lua交互內(nèi)存分配詳解

    C/C++ 與 Lua 的交互是通過 lua_State 這一句柄進行交互,我們常規(guī)的創(chuàng)建都是通過 luaL_newstate 這一輔助函數(shù),這篇文章主要給大家詳細介紹了C++與Lua交互內(nèi)存分配,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11

最新評論