Qt QListWidget拖拽实现
来源:互联网 发布:雅思托福的区别知乎 编辑:程序博客网 时间:2024/06/08 15:34
接着前面的QTableWidget继续写吧,原本实现QTableWidget的拖拽,结果还是没弄好,唉……一个字,搓!两个字,很搓!
QTableWidget拖拽没有实现,但是还是有希望的,希望至少还不是在田野上,QListWidget的拖拽实现了,亲们……
直接贴代码吧!
==========================================================================================
下面的实现是在一个控件里面拖拽Item,插入到鼠标释放的位置
#ifndef DRAG_TABLE_H#define DRAG_TABLE_H#include <QTableWidget>#include <QListWidget>#include <QtGui>#include <QDrag>class DragListWidget : public QListWidget{public:DragListWidget(QWidget *parent = 0);protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void dragEnterEvent(QDragEnterEvent *event);void dragMoveEvent(QDragMoveEvent *event);void dropEvent(QDropEvent *event);public:QPoint startPos;QPoint endPos;};#endifDragListWidget.cpp
#include "DragTable.h"DragListWidget::DragListWidget(QWidget *parent):QListWidget(parent){this->setCurrentRow(10);addItem("1");addItem("2");addItem("3");addItem("4");addItem("5");addItem("6");addItem("7");addItem("8");addItem("9");addItem("10");this->setAcceptDrops(true);//设置QListWidget的Item项可以被拖拽}void DragListWidget::mousePressEvent( QMouseEvent *event ){if (event->button() == Qt::LeftButton)startPos = event->pos();QListWidget::mousePressEvent(event);}void DragListWidget::mouseMoveEvent(QMouseEvent *event){QListWidgetItem *item = currentItem();mimeData = new QMimeData;mimeData->setText(item->text());QDrag *drag = new QDrag(this);drag->setMimeData(mimeData);//drag->setPixmap(pixmap);Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);if(dropAction == Qt::MoveAction){delete item;//删除原有的item,在dropEvent(QDropEvent *event)函数中插入item}}void DragListWidget::mouseReleaseEvent(QMouseEvent *event){int distance = (endPos - startPos).manhattanLength();if (distance >= QApplication::startDragDistance()){startDrag();}}void DragListWidget::dragEnterEvent( QDragEnterEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source == this) {event->setDropAction(Qt::MoveAction);event->accept();}}void DragListWidget::dragMoveEvent( QDragMoveEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source == this) {event->setDropAction(Qt::MoveAction);event->accept();}}void DragListWidget::dropEvent( QDropEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source == this) {endPos = event->pos();//得到鼠标移动到的坐标QListWidgetItem *itemRow = itemAt(endPos);.//通过endPos获取鼠标位置所在的行int rowCount = row(itemRow);insertItem(rowCount + 1,mimeData->text());//row+1 为鼠标所指向的行,如果只是向末尾位置插入,把insertItem(rowCount + 1,mimeData->text())改为addItem(mimeData->text())event->setDropAction(Qt::MoveAction);event->accept();}}
效果如图:
===================================================================================
从其他的QListWidget中拖拽到另一个QListWidget
DragListWidget.h
#ifndef DRAG_TABLE_H#define DRAG_TABLE_H#include <QTableWidget>#include <QListWidget>#include <QtGui>#include <QDrag>class DragListWidget: public QListWidget{public:DragListWidget(QWidget *parent = 0);protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void dragEnterEvent(QDragEnterEvent *event);void dragMoveEvent(QDragMoveEvent *event);void dropEvent(QDropEvent *event);public:QPoint startPos;QPoint endPos;};#endif
DragListWidget.cpp
#include "DragTable.h"DragListWidget::DragListWidget(QWidget *parent):QListWidget(parent){this->setCurrentRow(10);addItem("1");addItem("2");addItem("3");addItem("4");addItem("5");addItem("6");addItem("7");addItem("8");addItem("9");addItem("10");this->setAcceptDrops(true);//设置QListWidget的Item项可以被拖拽}void DragListWidget::mousePressEvent( QMouseEvent *event ){if (event->button() == Qt::LeftButton)startPos = event->pos();QListWidget::mousePressEvent(event);}void DragListWidget::mouseMoveEvent(QMouseEvent *event){if (event->buttons() & Qt::LeftButton) { int distance = (event->pos() - startPos).manhattanLength(); if (distance >= QApplication::startDragDistance()) startDrag(); } QListWidget::mouseMoveEvent(event);}void DragListWidget::dragEnterEvent( QDragEnterEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source != this) { event->setDropAction(Qt::MoveAction); event->accept(); }}void DragListWidget::dragMoveEvent( QDragMoveEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source != this) {event->setDropAction(Qt::MoveAction);event->accept();}}void DragListWidget::dropEvent( QDropEvent *event ){DragListWidget *source = (DragListWidget *)((void*)(event->source()));if (source && source != this) {endPos = event->pos();QListWidgetItem *itemRow = itemAt(endPos);int rowCount = row(itemRow);insertItem(rowCount + 1,mimeData->text());//addItem(event->mimeData()->text());event->setDropAction(Qt::MoveAction);event->accept();}}
效果如图:
有什么地方不对,还请大牛指点,学习中……
- Qt QListWidget拖拽实现
- 使用Qt的QListWidget完成拖拽功能
- Qt QListWidget
- Qt QListWidget实现图片缩略图列表
- 子类化QListWidget实现自定义拖拽功能.
- Qt:QListWidget的item上实现右键菜单
- QT QListWidget用法
- [Qt练习]QListWidget
- Qt QListWidget的使用
- QT常用控件之QListWidget
- QT之QListWidget与QListWidgetItem
- Qt--- QListWidget的学习使用
- Qt之QListWidget简单介绍
- qt之QListWidget与QListWidgetItem
- Qt学习: QListWidget的用法.
- Qt学习: QListWidget程序示例
- Qt:QListWidget的item上实现右键菜单(空白的地方)
- Qt实现右键菜单的五种方法!(以QListWidget为例)
- iOS 7 之 Sprites
- ociuldr oracle导出数据到txt
- jquery如何获取选中的单选按钮的值
- 读书笔记——COM技术内幕(1)组件
- UML_Activity Diagram
- Qt QListWidget拖拽实现
- sql复习
- Project Anarchy游戏引擎的研究之路
- 文本框的border
- jmeter插件推荐
- HTTP协议详解
- pygame安装
- 海运管理系统
- qdbusviewer和qmlviewer的安装包