一、要想长按删除QListWidget的Item,必须重写鼠标事件,所以需要继承QListWidget重写自己的MyListWidget。分享一下我写的类:
//.h文件
#ifndefCJWLISTWIDGET_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()函数,所以需要使用
QList<QListWidgetItem*> list=this->selectedItems(); 3、QListWidget的item编号是从0开始的,即第一项的row是0。 二、删除QListWidget里的某项内容时,先把其位置上的widget从QListWidget拿掉(脱离关系),如果不再需要此widget的话,可删除它 QListWidgetItem *item = listWidgetMember->takeItem(listWidgetMember->currentRow()); delete item; 三、 QList < QListWidgetItem * > list =listWidget1->findItems(pStr,Qt::MatchCaseSensitive);QListWidgetItem* sel = list[0]; r = listWidget1->row(sel); QListWidgetItem *item = listWidget1->takeItem(r); listWidget1->removeItemWidget(item); delete item;
Qt中listwidget中删除item的方法
最新推荐文章于 2023-12-21 11:45:43 发布