原地址: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。

最新文章

  1. .NET足球赛事资料数据库平台SmartLottery开源发布——全球足球联赛应有尽有
  2. UVALive 6911---Double Swords(贪心+树状数组(或集合))
  3. sqlserver2008使用设置sa用户登录步骤
  4. Node.js V0.12 新特性之性能优化
  5. bzoj 3242: [Noi2013]快餐店 章鱼图
  6. 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)
  7. POJ 2182 Lost Cows (线段树)
  8. HttpURLConnection请求数据流的写入(write)和读取(read)
  9. fireasy 使用篇 - 简介
  10. esp8266 免费wifi强推广告神器(4) 发现当前WIFI下的用户数目,IP,MAC请求http信息 在用户请求跳转后跳转
  11. WEB 3D SVG CAD 向量 几个实施(转)
  12. jmeter完成md5加密的接口请求参数
  13. Python编写的记事本小程序
  14. Android学习之基础知识四-Activity活动8讲(活动的灵活运用)
  15. android 屏幕旋转 不重新加载oncreate
  16. TOP100summit 2017:微博如何做到1小时增加一千台服务器应对鹿晗恋情带来的流量暴增
  17. Ubuntu 添加删除用户 How to Add and Delete Users on Ubuntu 16.04
  18. [Google] 看雪论坛: 安卓碎片化的情况
  19. 【绝迹篇】RSA加密算法(私钥加签公钥验签)
  20. HDU-5280

热门文章

  1. 最新Android ADT, SDK, SDK_tool等官方下载说明(及时更新)
  2. Spout的实现步骤
  3. node.js第十课(HTTPserver)
  4. ThinkPHP - 自定义标签库 - 标签驱动
  5. CodeForces 525C Ilya and Sticks 贪心
  6. XHTML 基础(含部分css)
  7. zIndex属性在IE中无效
  8. Chapter 2.策略模式
  9. 使用Android studio下载github上的工程及问题解决
  10. asp.net jquery+ajax异步刷新1