原地址: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. Android:源码环境编译自定义的APP到ROM(System Image)中

    有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...

  2. javascript date部分

    <html> <body> <script type="text/javascript"> var d=new Date() var weekd ...

  3. shiro权限框架

    权限的组成部分:用户 资源 角色 权限 数据库关系表设计是根据自己项目需求设计的 account表role表(id,rolename)account_role(id,aid,rid)permissio ...

  4. 如何A掉未来程序改

    话说有这样一道神题:[集训队互测2015]未来程序·改. 大意是要求写一个简单的C++解释器!这里去掉了C++的许多特性,连简单的break和continue都没有了! 话说NOI被屠了之后,一时心血 ...

  5. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  6. zzuli Camellia的难题(暴力)

    1784: Camellia的难题 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 67  Solved: 14SubmitStatusWeb Boar ...

  7. Android:创建可穿戴应用 - 安装和依赖管理

    安装可穿戴应用 在开发时,你能够像一般移动应用一样直接把应用安装到可穿戴设备中. 使用adb install或者 Android Studio上的Play button. 当你准备好要公布时,你须要把 ...

  8. [产值分析]生产部KPI考核之产值分析

    接到新任务:设计统计电子和磁电公司生产部产值分析报表. 眼下状况: 1.电子公司:取最新单位价格*入库数量 2.磁电公司:取最低价格*入库数量(实际取价的时候又没有取到最低价) 假设计算出来的结果和財 ...

  9. SqlServer字段说明查询(表基本信息查询)

    --快速查看表结构(比较全面的) THEN obj.name ELSE '' END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[v ...

  10. File类常见方法

    package file; import java.io.File; public class FileTest2 { public static void main(String[] args) { ...