//.h文件
#ifndef CJWLISTWIDGET_H
#defineCJWLISTWIDGET_H
#include<QApplication>
#include<QWidget>
#include<QListWidget>
#include<QMenu>
#include<QAction>
#include<QTime>
#include<QList>
classCjwListWidget : public QListWidget
{
Q_OBJECT
public:
explicitCjwListWidget(QWidget *parent = 0);
private:
QTime*time;
QAction*action;
voidmousePressEvent(QMouseEvent *event);
voidmouseReleaseEvent(QMouseEvent *e);
signals:
publicslots:
voiddeleteItemAt();
};
#endif// CJWLISTWIDGET_H
//.cpp文件
#include"cjwlistwidget.h"
#include<QMessageBox>
CjwListWidget::CjwListWidget(QWidget*parent):
QListWidget(parent)
{
time=newQTime(0,0,0,0);
action=newQAction(tr("删除"),this); //删除事件
connect(action,SIGNAL(triggered()),this,SLOT(deleteItemAt()));
}
voidCjwListWidget::mousePressEvent(QMouseEvent *event)
{
time->start();
if(this->itemAt(mapFromGlobal(QCursor::pos()))!= NULL) //如果有item则选中
{
itemAt(mapFromGlobal(QCursor::pos()))->setSelected(true);
}
}
voidCjwListWidget::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());// 菜单出现的位置为当前鼠标的位置
}
}
}
voidCjwListWidget::deleteItemAt()
{
QList<QListWidgetItem*>list=this->selectedItems();
if(list.size()==0)
return;
QListWidgetItem*sel=list[0];
if(sel)
{
intr=this->row(sel);
deletetakeItem(r);
}
}
需要注意的有三点:
1、删除Item需要使用函数takeItem而不是removeItemWidget。
2、要想删除选中的项,由于Qt4中取消了selectedItem()函数,所以需要使用
<QListWidgetItem*> QList list=this->selectedItems();
3、QListWidget的item编号是从0开始的,即第一项的row是0。