Qt制作一个ListView列表

一、概述

  案例:使用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(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(itemAt(event->pos()));
        QString filePath = QFileDialog::getOpenFileName(this, tr("选择视频"), "C:\\Users\\wei.yang\\Downloads\\opencv_res", tr("Image Files(*.jpg *.png)"));
        const char

你可能感兴趣的:(qt,开发语言)