Qt ListWidget item 发起拖放
第一步:重写类 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 发起拖放的更多相关文章
- C/C++ Qt ListWidget 列表框组件应用
ListWidget列表框组件,该组件与TreeWidget有些相似,区别在于TreeWidget可以实现嵌套以及多字段结构,而ListWidget组件则只能实现单字段结构,ListWidget组件常 ...
- Qt listwigwt item 加入自定义元素
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- Qt graphic item日记
今天在用用graphic view 加入graphic item的时候要引入一个context menu,自然就要对context menu上的action进行slot处理.可是graphic ite ...
- Qt listWidget和QListWidgetItem的简单使用
简单的来实习了下 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QListWid ...
- C/C++ Qt 给ListWidget增加右键菜单
在上一篇博文<C/C++ Qt ListWidget 列表框组件应用>中介绍了ListWidget组件的基本使用技巧,本次将给ListWidget组件增加一个右键菜单,当用户在ListWi ...
- Qt:QListWidgetItem
0.说明 一个QListWidgetItem是QListWidget中的一项(一行). 每个Item都可以持有多部分的信息,并将它们在适当时候展示出来. 在构造一个Item时指明它所在的List Wi ...
- 【Win10应用开发】通过拖放来打开文件
除了可以使用XXXFilePicker来浏览文件外,其实在UWP APP中,也可以向传统Windows窗口一样,通过拖放的方式来打开文件. 处理过程和WPF的原理差不多,毕竟都是一脉相承,于是,在学习 ...
- Qt图形视图框架公开课资料
接受CSDN学院的邀请,讲一次公开课,主题是Qt图形视图框架,报名链接在这里:http://edu.csdn.net/huiyiCourse/detail/228. 内容有两部分:自定义Item和拖放 ...
- Qt Quick实现的涂鸦程序
之前一直以为 Qt Quick 里 Canvas 才干够自绘.后来发觉不是,原来还有好几种方式都能够画图! 能够使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染).能够构造QSGN ...
随机推荐
- python练习:寒冰猴子狐狸,猫狗咬架
python练习:寒冰猴子狐狸,猫狗咬架 一,寒冰猴子狐狸 class Person: def __init__(self, na, gen, age, fig): self.name = na se ...
- oracle远程连接服务器
一.需要下载的工具 1.PLSQL Developer 下载及安装地址如下: http://www.zdfans.com/html/18196.html 2.下载instantclient-basic ...
- 泡泡一分钟:Tightly-Coupled Aided Inertial Navigation with Point and Plane Features
Tightly-Coupled Aided Inertial Navigation with Point and Plane Features 具有点和平面特征的紧密耦合辅助惯性导航 Yulin Ya ...
- oracle 存储函数,更新库存
create procedure PRO_update_Goods_group_stock is v_min_stock , ); v_gg_stock , ); v_goods_no number; ...
- 【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理(六)
经过我们对Spring的IOC不断的深入学习,Spring的面貌逐渐变得清晰,我们对Spring的了解也更加的深入.从这篇博文开始我们学习Spring的第二大核心内容:AOP. 什么是AOP AOP( ...
- 使用memcpy函数时要注意拷贝数据的长度
memcpy函数简介 memcpy函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring).其原型是: void *memcpy(void *desti ...
- (CSDN迁移) 替换字符串中的空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public ...
- 19 Maven---项目管理工具
1.Maven概念 Maven 的正确发音是[ˈmevən].Maven 在美国是一个口语化的词语,代表专家.内行的意思. 一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工 ...
- 如何创建Kafka客户端:Avro Producer和Consumer Client
1.目标 - Kafka客户端 在本文的Kafka客户端中,我们将学习如何使用Kafka API 创建Apache Kafka客户端.有几种方法可以创建Kafka客户端,例如最多一次,至少一次,以及一 ...
- C++容器简介1—stack
一.简介 stack是一种容器适配器(STL的容器分为顺序容器和关联容器,容器适配器),被设计来用于操作先进后出(FILO)结构的情景,在这种情况下, 元素的插入和删除都只能在容器的尾部进行. sta ...