zoukankan      html  css  js  c++  java
  • 实现长按删除QListWidget的Item

    要想长按删除QListWidget的Item,必须重写鼠标事件,所以需要继承QListWidget重写自己的MyListWidget。分享一下我写的类:

    //.h文件
    #ifndef CJWLISTWIDGET_H
    
    #define CJWLISTWIDGET_H
    
    
    
    
    #include<QApplication>
    
    
    #include<QWidget>
    
    
    #include<QListWidget>
    
    
    #include<QMenu>
    
    
    #include<QAction>
    
    
    #include<QTime>
    
    
    #include<QList>
    
    
    
    
    class CjwListWidget : public QListWidget
    
    
    {
    
    
    Q_OBJECT
    
    
    public:
    
    
    explicit CjwListWidget(QWidget *parent = 0);
    
    
    
    
    private:
    
    
    QTime *time;
    
    
    QAction *action;
    
    
    void mousePressEvent(QMouseEvent *event);
    
    
    void mouseReleaseEvent(QMouseEvent *e);
    
    
    
    
    signals:
    
    
    
    
    public slots:
    
    
    void deleteItemAt();
    
    
    
    
    };
    
    
    
    
    #endif // CJWLISTWIDGET_H
    
    
    
    
    //.cpp文件
    
    
    #include "cjwlistwidget.h"
    
    
    #include<QMessageBox>
    
    
    
    
    CjwListWidget::CjwListWidget(QWidget *parent):
    
    
    QListWidget(parent)
    
    
    {
    
    
    time=new QTime(0,0,0,0);
    
    
    
    
    action=new QAction(tr("删除"),this); //删除事件
    
    
    connect(action,SIGNAL(triggered()),this,SLOT(deleteItemAt()));
    
    
    }
    
    
    
    
    void CjwListWidget::mousePressEvent(QMouseEvent *event)
    
    
    {
    
    
    time->start();
    
    
    if(this->itemAt(mapFromGlobal(QCursor::pos())) != NULL) //如果有item则选中
    
    
    {
    
    
    itemAt(mapFromGlobal(QCursor::pos()))->setSelected(true);
    
    
    }
    
    
    }
    
    
    
    
    void CjwListWidget::mouseReleaseEvent(QMouseEvent *e)
    
    
    {
    
    
    if(time->elapsed()>1000)
    
    
    {
    
    
    if(this->itemAt(mapFromGlobal(QCursor::pos())) != NULL) //如果有item则添加"修改"菜单
    
    
    {
    
    
    QMenu* popMenu = new QMenu(this);
    
    
    popMenu->addAction(action);
    
    
    popMenu->exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
    
    
    }
    
    
    }
    
    
    }
    
    
    
    
    void CjwListWidget::deleteItemAt()
    
    
    {
    
    
    QList<QListWidgetItem*> list=this->selectedItems();
    
    
    if(list.size()==0)
    
    
    return;
    
    
    QListWidgetItem* sel=list[0];
    
    
    if(sel)
    
    
    {
    
    
    int r=this->row(sel);
    
    
    delete takeItem(r);
    
    
    }
    
    
    }
    
    
    
    
    需要注意的有三点:
    
    
    1、删除Item需要使用函数takeItem而不是removeItemWidget。
    
    
    2、要想删除选中的项,由于Qt4中取消了selectedItem()函数,所以需要使用
    
    
        QList<QListWidgetItem*> list=this->selectedItems();
    
    
    3、QListWidget的item编号是从0开始的,即第一项的row是0。
    
  • 相关阅读:
    Web前端开发——HTML概述
    Web前端开发——概述
    [nowCoder] 两个不等长数组求第K大数
    [nowCoder] 两个长度相同有序数组的中位数
    [nowCoder] 完全二叉树结点数
    [nowCoder] 子数组最大乘积
    [nowCoder] 局部最小值位置
    [LeetCode] Binary Tree Right Side View
    [C/CPP系列知识] Type difference of character literals 和 bool in C and C++
    [C/CPP系列知识] C++中extern “C” name mangling -- Name Mangling and extern “C” in C++
  • 原文地址:https://www.cnblogs.com/jwchen08/p/5942537.html
Copyright © 2011-2022 走看看