Qt制作一个ListView列表

本文介绍了如何使用Qt创建一个ListView,并提供了自定义MainListView和MainListViewItem的代码示例,展示了ListView点击事件与OpenCV结合的应用场景。

一、概述

  案例:使用Qt制作一个ListView。点击ListView的Item可以用于测试OpenCV的各种效果

  自定义一个:MainListView继承QListWidget 、MainListViewItem继承QListWidgetItem

二、代码示例

  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);
    //连接信号与槽函数,如果选中项发生变化则触发item图标的更新.都是当前对象发生
    connect(this,&MainListView::itemSelectionChanged,this,&MainListView::updateSelectedIcon);
    connect(this,&MainListView::itemClicked,this,&MainListView::onMainItemClick);
}

/**
 * 处理鼠标hove事件,item图标就变成hove状态
 * @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状态(条件是该item没有被选中)
    if(oldHighlightItem != theHighlightItem){
       if(oldHighlightItem && !oldHighlightItem->isSelected()) oldHighlightItem->setIcon(oldHighlightItem->mIcon);
       if(theHighlightItem && !theHighlightItem->isSelected()) theHighlightItem->setIcon(theHighlightItem->mIconHover);
    }
}

/**
 * 鼠标按下(这个可以当做item的点击事件,能够正常执行)
 * @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.ya
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值