第一步:重写类 MyListWidget 继承自 QListWidget

第二步:重写 mousePressEvent 函数 和 mouseMoveEvent 函数

void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);

MyListWidget.h 文件

#ifndef MYLISTWIDGET_H
#define MYLISTWIDGET_H #include <QListWidget>
// 包含所有用到的界面类
#include <QtGui> class MyListWidget : public QListWidget
{
Q_OBJECT public:
MyListWidget(QWidget *parent);
~MyListWidget(); private:
// 拖放起点
QPoint m_startPos;
// 被拖放的item
QListWidgetItem* m_sitem;
void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
}; #endif // MYLISTWIDGET_H

MyListWidget.cpp 文件

#include "MyListWidget.h"

MyListWidget::MyListWidget(QWidget *parent)
: QListWidget(parent)
{ } MyListWidget::~MyListWidget()
{ } void MyListWidget::mousePressEvent(QMouseEvent* event)
{
// 记下起点
m_startPos = event->pos();
m_sitem = this->itemAt(event->pos());
// 记得调用父类的函数,保持原有的按键行为
QListWidget::mouseMoveEvent(event);
} void MyListWidget::mouseMoveEvent(QMouseEvent* event)
{
// 只允许左键拖动
if (!(event->buttons() & Qt::LeftButton))
{
return;
}
// 移动一定距离后才算是开始拖动
if ((event->pos() - m_startPos).manhattanLength() < QApplication::startDragDistance())
{
return;
}
// 找到拖动的项
if (m_sitem == NULL)
{
return;
}
QString itemText = m_sitem->text();
// 创建数据
QDrag* drag = new QDrag(this);
QMimeData* mimeData = new QMimeData();
mimeData->setText(itemText);
drag->setMimeData(mimeData);
// 设置拖动时的图像显示
QPixmap drag_img(, );
QPainter painter(&drag_img);
painter.drawText(QRectF(, , , ), itemText, QTextOption(Qt::AlignVCenter));
drag->setPixmap(drag_img);
// 启动拖放 start a drag
Qt::DropAction result = drag->exec(Qt::CopyAction | Qt::MoveAction);
// 检查操作有没有成功,有没有被取消
if (Qt::IgnoreAction != result)
{
qDebug() << QString::fromLocal8Bit("成功完成拖拽");
}
// 按住 Ctrl 就是 Qt::CopyAction,没按 就是 Qt::MoveAction
}

Qt ListWidget item 发起拖放的更多相关文章

  1. C/C++ Qt ListWidget 列表框组件应用

    ListWidget列表框组件,该组件与TreeWidget有些相似,区别在于TreeWidget可以实现嵌套以及多字段结构,而ListWidget组件则只能实现单字段结构,ListWidget组件常 ...

  2. Qt listwigwt item 加入自定义元素

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  3. Qt graphic item日记

    今天在用用graphic view 加入graphic item的时候要引入一个context menu,自然就要对context menu上的action进行slot处理.可是graphic ite ...

  4. Qt listWidget和QListWidgetItem的简单使用

    简单的来实习了下 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QListWid ...

  5. C/C++ Qt 给ListWidget增加右键菜单

    在上一篇博文<C/C++ Qt ListWidget 列表框组件应用>中介绍了ListWidget组件的基本使用技巧,本次将给ListWidget组件增加一个右键菜单,当用户在ListWi ...

  6. Qt:QListWidgetItem

    0.说明 一个QListWidgetItem是QListWidget中的一项(一行). 每个Item都可以持有多部分的信息,并将它们在适当时候展示出来. 在构造一个Item时指明它所在的List Wi ...

  7. 【Win10应用开发】通过拖放来打开文件

    除了可以使用XXXFilePicker来浏览文件外,其实在UWP APP中,也可以向传统Windows窗口一样,通过拖放的方式来打开文件. 处理过程和WPF的原理差不多,毕竟都是一脉相承,于是,在学习 ...

  8. Qt图形视图框架公开课资料

    接受CSDN学院的邀请,讲一次公开课,主题是Qt图形视图框架,报名链接在这里:http://edu.csdn.net/huiyiCourse/detail/228. 内容有两部分:自定义Item和拖放 ...

  9. Qt Quick实现的涂鸦程序

    之前一直以为 Qt Quick 里 Canvas 才干够自绘.后来发觉不是,原来还有好几种方式都能够画图! 能够使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染).能够构造QSGN ...

随机推荐

  1. PhpStorm 头部注释、类注释和函数注释的设置(稍微完善点)

    首先,PhpStorm中文件.类.函数等注释的设置在:setting->Editor->FIle and Code Template->Includes下设置即可,其中方法的默认是这 ...

  2. 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!

    从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称.具体来说 ...

  3. 包含MANIFEST.MF的jar可执行应用指定classpath及spring boot应用增量升级打包实现

    对于不包含MANIFEST.MF,或jar包中的MANIFEST.MF未指定MainClass的jar,可以通过java命令行选项-classpath指定classpath.但是如果是包含MainCl ...

  4. PostgreSQL体系架构与内存结构

    PostgreSQL体系架构 PostgreSQL的内存结构

  5. Eclipse导入工程提示“No projects are found to import”

    如果发现导入工程的时候,出现"No projects are found to import" 的提示,首先查看项目目录中是否有隐藏文件.project,还有目录结构也还要有一个隐 ...

  6. git 比较实用的命令

    git 删除已经add 过的文件 使用 git rm 命令即可,有两种选择, 使用 git rm 命令即可,有两种选择, 一种是 git rm --cached "文件路径",不删 ...

  7. Laya改变文档结构后GameConfig自动生成错误问题

    原来的WeaponPanel,ItemPanel,PetPanel改变了路径,然后GameConfig还是一直生成旧的路径,因为旧路径已经不存在,所以提示报错,编译不过去. 需要把编辑模式下的改路径相 ...

  8. Python - Django - form 组件自定义校验

    reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. LeetCode Top Interview Questions

    LeetCode Top Interview Questions https://leetcode.com/problemset/top-interview-questions/ # No. Titl ...

  10. python json dumps datetime类型报错

    # -*- coding: utf-8 -*- import json from datetime import date, datetime class MyEncoder(json.JSONEnc ...