原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r99u.html

要想长按删除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。

实现长按删除QListWidget的Item的更多相关文章

  1. 【转】android: 长按删除listview的item

    原文网址:http://www.cnblogs.com/nuistlr/archive/2012/09/07/2675649.html 首先要继承OnItemLongClickListener pub ...

  2. android: 长按删除listview的item

    转自:http://www.cnblogs.com/nuistlr/archive/2012/09/07/2675649.html 首先要继承OnItemLongClickListener publi ...

  3. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item

    本文为原创博客.出自http://blog.csdn.net/minimicall 到今天为止,搜芽的卖家版本号应该来说已经基本完毕.攻坚克难的一路过来.速度也控制的比較好. 项目过程进度 从任务分配 ...

  4. 小生功能贴<一> --- 动态添加应用 具有长按删除功能

    ---恢复内容开始--- 动态添加应用 具有长按删除功能 功能如下图:                (图片显示功能不是你要的,那就默默关闭页面吧) 设计思路: 页面一:用girdview网格显示图标 ...

  5. Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮

    效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...

  6. Qt-网易云音乐界面实现-7 消息中心实现,主要是QListWidget 自定义Item 和QTabwidget使用

    最近写的有点烦躁, 感觉内容真的很多!很多!很多. 目前真的想知道网易官方在出这款产品是,用了多少人和多长时间. 今天写的这个消息中心,有点糙,只是原理实现了没有完全复制过来,心里有团火,不想写了. ...

  7. 使用mx:Repeater在删除和添加item时列表闪烁

    使用mx:Repeater在删除和添加item时列表闪烁 不可能在用户界面上闪闪的吧,recycleChildren属性可帮助我们 recycleChildren属性==缓存,设为true就可以了 本 ...

  8. windows文件名太长无法删除的解决办法

    安装nodejs 的模块hexo后,由于香重新安装,在删除的时候却提示文件名太长无法删除,dos命令.回收站各种都无法搞定,后来找到解决办法: 1.进入这些文件的所在目录的上层目录,右键这些文件的所在 ...

  9. Android SwipeToDismiss:左滑/右滑删除ListView条目Item

     <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(githu ...

随机推荐

  1. (3)选择元素——(2)文档对象模型(The Document Object Model)

    One of the most powerful aspects of jQuery is its ability to make selecting elements in the DOM easy ...

  2. Java chapter04-1

    public class CPU { int speed; //获得speed的值 public void setSpeed(int m){ speed = m; } //返回speed的值 publ ...

  3. POJ 1155 - TELE 树型DP(泛化背包转移)..

    dp[x][y]代表以x为根的子树..连接了y个终端用户(叶子)..所能获得的最大收益... dp[x][ ]可以看成当根为x时..有个背包空间为0~m...每个空间上记录了到到达这个空间的最大收益. ...

  4. 【转】CentOS 6.5 生产环境优化指南

    原文链接:https://www.deepwebcn.com/82.html centos6.5 CentOS 6.5 系统安装之后并不能立即投入生产环境使用,常常需要先经过我们运维人员的优化才行.优 ...

  5. POJ 2208 Pyramids 欧拉四面体

    给出边长,直接就可以求出体积咯 关于欧拉四面体公式的推导及证明过程 2010-08-16 14:18 1,建议x,y,z直角坐标系.设A.B.C少拿点的坐标分别为(a1,b1,c1),(a2,b2,c ...

  6. MAC X OS 自定义分辨率

    1 vi /Library/Preferences/SystemConfiguration/com.apple.Boot.plist 2 3 将该文件修改成如下内容: 4 5 <key>G ...

  7. libvirt(virsh命令介绍)

    有了virt-install是安装虚拟机的命令,当然也需要一个管理虚拟机的命令了,那就是virsh. virsh命令使用 virsh <command> <domain-id> ...

  8. 自己设计的SSO登录流程图

    这个图上不考虑安全加密.由于本身SSO流程图已经比較复杂了.可能还有问题,欢迎大家拍砖. 1.登录流程图: 2.退出流程图: 3.改进方面: 每一个应用登录后.直接将ticket写入session中, ...

  9. 架构设计的UML图形思考

    本篇紧接着上一篇   基本OOP知识  ,介绍高焕堂老师的第二讲. 架构设计的UML图形思考.本篇最重要的是三个词语:图形.思考.UML. 架构师的作用体现主要在项目开发前期.在整个项目还没有完毕的时 ...

  10. HDU 5009 DP

    2014 ACM/ICPC Asia Regional Xi'an Online 对于N个数 n(1 ≤ n ≤ 5×104), 把N个数分成随意个区间,每一个区间的值是该区间内不同数字个数的平方和, ...