由于新项目需要,要设计类似windows下的文件拖放到文件夹的视觉效果,废话少说上代码!
.h
<span style="font-size:18px;">#ifndef DRAGLISTWIDGET_H.cpp
#define DRAGLISTWIDGET_H
#include <QDrag>
#include <QEvent>
#include <QMouseEvent>
#include <QListWidget>
#include <QListWidgetItem>
class DragListWidget : public QListWidget
{
Q_OBJECT
public:
DragListWidget(QWidget *parent = 0);
protected:
void dropEvent(QDropEvent *event);
public:
QPoint endPos;
};
#endif // DRAGLISTWIDGET_H</span>
<span style="font-size:18px;">#include "draglistwidget.h"#include <QDebug>DragListWidget::DragListWidget(QWidget *parent):QListWidget(parent){ setCurrentRow(10); setDragEnabled(true); setViewMode(QListView::IconMode); setResizeMode(QListView::Adjust); setDragDropMode(QAbstractItemView::DragDrop); setAcceptDrops(true);//设置QListWidget的Item项可以被拖拽 setSelectionMode(QAbstractItemView::ContiguousSelection ); QListWidgetItem * listItem; QString NoStr; for(int i = 0;i<10;i++) { NoStr = QString::number(i+1); listItem = new QListWidgetItem(NoStr,this); listItem->setSizeHint(QSize(50,50)); listItem->setIcon(QIcon(":/Zip")); addItem(listItem); }}void DragListWidget::dropEvent( QDropEvent *event ){ DragListWidget *source = qobject_cast<DragListWidget *>(event->source()); if (source && source == this) { //得到鼠标移动到的坐标 endPos = event->pos(); //通过endPos获取鼠标位置所在的行 QListWidgetItem *Enditem = itemAt(endPos); //判断该位置是否在Item上 int rowCount = row(Enditem); if(rowCount >= 0) { QList<QListWidgetItem*> pListItem; pListItem = source->selectedItems(); int count = pListItem.count(); if(count) { for(int i= 0;i<count;i++) { QListWidgetItem *item = pListItem.at(i); removeItemWidget(item); delete item; } } } }}</span>