• 9284阅读
  • 2回复

[原创]实现长按删除QListWidget的Item [复制链接]

上一主题 下一主题
离线jwchen08
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-29
要想长按删除QListWidget的Item,必须重写鼠标事件,所以需要继承QListWidget重写自己的MyListWidget。分享一下我写的类:
//.h文件

  1. #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_OBJECTpublic:    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文件
  1. #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。




[ 此帖被jwchen08在2011-03-29 21:02重新编辑 ]
离线jwchen08
只看该作者 1楼 发表于: 2011-03-29
怎么在论坛发代码总是乱码呢,搞不懂
离线XChinux

只看该作者 2楼 发表于: 2011-03-29
重新排下版。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个