当前位置: 首页 > news >正文

无域名建网站查做外贸客户的网站

无域名建网站,查做外贸客户的网站,网站建设加微信,网设一、需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式#xff0c;是基于QDrag实现的#xff0c;这个类是qt自己封装好了的#xff0c;所以可定制性也就没有了那么强#xff0c;最明显的是#xff0c;这个类在执…一、需求说明        上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式是基于QDrag实现的这个类是qt自己封装好了的所以可定制性也就没有了那么强最明显的是这个类在执行exec方法后mouse系列的回调接口就被阻塞了随之而来的问题就是拖拽时item项没有了hover特性为了解决这个问题我们就不能使用QDrag类来实现拖拽了这也是这篇文章我要讲述的内容。 二、效果展示       如图1是demo的效果展示比较丑如果加上优秀的qss那必然能让人眼前一亮 图1 ListWidget拖拽 三、实现思路 继承QListWidget类重写其鼠标多拽时几个虚方法分别是mousePressEvent(鼠标按下)mouseMoveEvent(鼠标移动)mouseReleaseEvent(鼠标弹起)等当然还包括一些辅助的回调方法enterEvent和leaveEvent。鼠标按下时记录鼠标按下位置和鼠标点击项鼠标移动时移动插入项标示和item项快照位置并修改鼠标形状最后鼠标释放时判断如果需要更新拖拽项位置那么把原有项删除并构造新的项插入到目标位置      上边的几个步骤描述都是在mouse系列的回到接口中发生的再也没有QDrag的事儿啦。当然这个mouse方法中需要做一些鼠标状态维护等。 四、代码说明     1、重要的类和上一篇文章中的一样忘记的小伙伴可以到上一篇文章查看或者猛戳Qt之QAbstractItemView视图项拖拽(一)    2、下面就直接上代码    a、记录鼠标按下时信息 1 void DragList::mousePressEvent(QMouseEvent * event)2 {3 if (event-button() Qt::LeftButton)4 {5 m_LeftPress true;6 startPos event-pos();7 dragItem itemAt(event-pos());8 }9 10 QListWidget::mousePressEvent(event); 11 }     b、鼠标移动时维护鼠标状态、快照位置和插入表示位置 1 void DragList::mouseMoveEvent(QMouseEvent * event)2 {3 QListWidgetItem * item itemAt(event-pos());4 if (dragItem nullptr)5 {6 dragItem itemAt(event-pos());7 }8 9 if (m_ShotPicture nullptr) 10 { 11 InitShotLabel(); 12 } 13 if (m_ShotLine nullptr) 14 { 15 InitShotLine(); 16 } 17 18 QRect rect visualItemRect(dragItem); 19 if (ListItem * hoverWidget ItemWidget(item)) 20 { 21 QRect hoverRect visualItemRect(item); 22 QPoint pos hoverWidget-mapFromParent(event-pos()); 23 if (hoverRect.size().height() / 2 pos.y()) 24 { 25 m_ShotLine-move(mapToGlobal(QPoint(2, hoverRect.y() hoverRect.height() 1))); 26 } 27 else 28 { 29 m_ShotLine-move(mapToGlobal(QPoint(2, hoverRect.y() 1))); 30 } 31 32 m_ShotLine-setVisible(hoverRect.contains(event-pos())); 33 } 34 35 if (ListItem * newWidget ItemWidget(dragItem)) 36 { 37 m_ShotPicture-move(mapToGlobal(event-pos() - newWidget-mapFromParent(startPos))); 38 if (rect.contains(event-pos()) || event-pos().isNull()) 39 { 40 setCursor(Qt::ForbiddenCursor); 41 } 42 else 43 { 44 setCursor(Qt::ArrowCursor); 45 } 46 if (m_ShotPicture-isHidden()) 47 { 48 m_ShotPicture-show(); 49 } 50 } 51 52 53 // QListWidget::mouseMoveEvent(event); 54 }     c、鼠标释放时处理拖拽结果 1 void DragList::mouseReleaseEvent(QMouseEvent * event)2 {3 if (event-button() Qt::LeftButton)4 {5 m_LeftPress false;6 if (m_ShotPicture)7 {8 m_ShotPicture-close();9 m_ShotPicture-deleteLater(); 10 m_ShotPicture nullptr; 11 } 12 if (m_ShotLine) 13 { 14 m_ShotLine-close(); 15 m_ShotLine-deleteLater(); 16 m_ShotLine nullptr; 17 } 18 MouseRelease(event); 19 } 20 21 setCursor(Qt::ArrowCursor); 22 23 QListWidget::mouseReleaseEvent(event); 24 }     d、初始化跟随鼠标移动的快照并把当前拖拽的窗口截图设置给快照 1 void DragList::InitShotLabel()2 {3 m_ShotPicture new QLabel;4 m_ShotPicture-setWindowOpacity(0.95);5 m_ShotPicture-setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);6 m_ShotPicture-setAttribute(Qt::WA_TransparentForMouseEvents, true);7 8 if (ListItem * oldWidget ItemWidget(dragItem))9 { 10 m_ShotPicture-setPixmap(oldWidget-grab()); 11 m_ShotPicture-resize(visualItemRect(dragItem).size()); 12 } 13 m_ShotPicture-show(); 14 }     e、初始化鼠标插入位置标示 1 void DragList::InitShotLine()2 {3 m_ShotLine new QLabel;4 m_ShotLine-setObjectName(QStringLiteral(ShotLine));5 m_ShotLine-setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);6 m_ShotLine-setAttribute(Qt::WA_TransparentForMouseEvents, true);7 m_ShotLine-setStyleSheet(QLabel#ShotLine{background:green;});//用图片代替8 9 if (ListItem * oldWidget ItemWidget(dragItem)) 10 { 11 // m_ShotLine-setPixmap(oldWidget-grab()); 12 m_ShotLine-resize(visualItemRect(dragItem).size().width(), 2); 13 } 14 m_ShotLine-show(); 15 }     f、鼠标弹起具体处理函数 1 void DragList::MouseRelease(QMouseEvent * event)2 {3 QListWidgetItem * item itemAt(event-pos()); 4 if (item nullptr || item dragItem)5 {6 return;7 }8 9 int insertPos row(item); 10 if (ListItem * oldWidget ItemWidget(item)) 11 { 12 QPoint pos oldWidget-mapFromParent(event-pos()); 13 if (oldWidget-size().height() / 2 pos.y()) 14 { 15 insertPos 1; 16 } 17 } 18 19 if (dragItem) 20 { 21 if (ListItem * oldWidget ItemWidget(dragItem)) 22 { 23 QListWidgetItem * newItem new QListWidgetItem; 24 ListItem * itemWidget new ListItem; 25 itemWidget-SetData(oldWidget-GetData()); 26 27 insertItem(insertPos, newItem); 28 setItemWidget(newItem, itemWidget); 29 30 setCurrentItem(newItem); 31 32 oldWidget-deleteLater(); 33 } 34 35 dragItem takeItem(row(dragItem)); 36 if (dragItem) 37 { 38 delete dragItem; 39 dragItem nullptr; 40 } 41 } 42 } 五、下载链接      Qt之QAbstractItemView视图项拖拽2  六、相关文章   自定义拖放数据这篇文章是讲述怎么自定义QMimeData数据的我使用的是其中第二个方法。   Qt之QAbstractItemView视图项拖拽(一)   Qt之QAbstractItemView选择无焦点转载于:https://www.cnblogs.com/swarmbees/p/6055280.html
http://www.sadfv.cn/news/288134/

相关文章:

  • 帮人做网站的推广分类达人介绍
  • 网站建设费用的会计企业标准信息公共服务平台官网
  • php网站开发干嘛的多多进宝怎么推广赚钱
  • 制作一个网站需要多少钱网站备案不通过怎么解决
  • 番禺网站制作哪里有wordpress文章发布区
  • 建设一个跟京东一样的网站印度做网站设计
  • 建立网站专业公司龙井建设局网站
  • 图片分页网站模板专业做视频的网站
  • 茂名网站建设咨询网络营销推广方案总结
  • 班组建设网站青岛网站建设机构
  • 电脑用虚拟机做网站网络营销方式对比分析
  • 济南网站开发公司做淘宝网站要求与想法
  • 网站空间管理平台青岛新网站设计公司
  • 公共部门网站建设维护网页设计素材书店照片
  • 网站上存储播放视频怎么做网络市场调研
  • 北京网站制作西安网站开发培训费用
  • 怎样学好网站开发商丘做网站用什么程序比较好
  • 免费浏览网站的软件xp花生壳做网站
  • 个人网站建设教学视频网站展示怎么做
  • 企业州建设银行网站做机械配件的网站
  • php网站开发流程图win7 asp网站发布
  • 邯郸做网站多少钱广州新闻发布
  • 个人网站备案icp广告创意设计说明
  • 深圳网站外包公司网页美工设计基础
  • 网站建设二公司html5做网站
  • 个人淘宝客网站有哪些wordpress编辑页面如何修改
  • 淘宝网站开发费用衡阳seo优化首选
  • 网站源码下载安全吗代做百度收录排名
  • 网站开发常用模板量品定制合伙人
  • 用asp做网站的流程东莞饭堂承包东莞网站建设