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

成都专业做网站的公司有哪些潍坊模板建站定制网站

成都专业做网站的公司有哪些,潍坊模板建站定制网站,手机主页网站推荐,wordpress有中文官方版提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、QAbstractItemView二、解决问题总结前言 最近开发一个项目遇到了一个问题#xff0c;QTableView同时绑定doubleClicked和clicked信号#xff0c;结果发现… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录前言一、QAbstractItemView二、解决问题总结前言 最近开发一个项目遇到了一个问题QTableView同时绑定doubleClicked和clicked信号结果发现鼠标左键双击必然先触发一次单击信号鼠标右键双击就不会触发单击信号。我的需求是同时绑定单击和双击信号结果某些场景下同时触发信号我该怎么办呢 这个问题我终于在源代码里找到了答案。 一、QAbstractItemView QTableView继承这个类它的单击和双击信号就是从这个类触发的。 单击鼠标抬起事件 void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event) {Q_D(QAbstractItemView);QPoint pos event-pos();QPersistentModelIndex index indexAt(pos);if (state() EditingState) {if (d-isIndexValid(index) d-isIndexEnabled(index) d-sendDelegateEvent(index, event))update(index);return;}bool click (index d-pressedIndex index.isValid());bool selectedClicked click (event-button() Qt::LeftButton) d-pressedAlreadySelected;EditTrigger trigger (selectedClicked ? SelectedClicked : NoEditTriggers);const bool edited click ? edit(index, trigger, event) : false;d-ctrlDragSelectionFlag QItemSelectionModel::NoUpdate;if (d-selectionModel d-noSelectionOnMousePress) {d-noSelectionOnMousePress false;d-selectionModel-select(index, selectionCommand(index, event));}setState(NoState);if (click) {if (event-button() Qt::LeftButton)emit clicked(index);if (edited)return;QStyleOptionViewItem option d-viewOptionsV1();if (d-pressedAlreadySelected)option.state | QStyle::State_Selected;if ((d-model-flags(index) Qt::ItemIsEnabled) style()-styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, option, this))emit activated(index);} }重点是下面这几句 if (click) {if (event-button() Qt::LeftButton)emit clicked(index);先不用管它做了什么判断我简略说下只有index有效才会触发单击信号换言之index无效不会触发这个信号。而且必须是鼠标左键点击才行 可以明显看到clicked总是在doubleClicked之前触发。也就是第一次鼠标抬起的时候触发那个时候还没触发双击信号。 双击信号双击事件触发时 void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event) {Q_D(QAbstractItemView);QModelIndex index indexAt(event-pos());if (!index.isValid()|| !d-isIndexEnabled(index)|| (d-pressedIndex ! index)) {QMouseEvent me(QEvent::MouseButtonPress,event-localPos(), event-windowPos(), event-screenPos(),event-button(), event-buttons(), event-modifiers(), event-source());mousePressEvent(me);return;}// signal handlers may change the modelQPersistentModelIndex persistent index;emit doubleClicked(persistent);if ((event-button() Qt::LeftButton) !edit(persistent, DoubleClicked, event) !style()-styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, nullptr, this))emit activated(persistent);d-pressedIndex QModelIndex(); }重点是下面这几句 emit doubleClicked(persistent);鼠标双击事件由底层系统触发鼠标左键和右键均可以触发。 由此我们看到当你用鼠标左键单击的时候总会发送一个单击信号一个双击信号而且单击信号一定在双击信号前面。 二、解决问题 其实没有什么问题需要解决本来就可以同时绑定单击和双击信号。严格来说只要你的单击信号和双击信号没有重叠的业务逻辑你就可以无视这个问题。但是有时候偏偏出现我只要双击不要单击的场景怎么办呢 办法还是有的先看下面的函数 int doubleClickInterval QApplication::doubleClickInterval(); // 单位毫秒其实是有双击触发间隔的意思就是只要两次单击在这个时间间隔内就可以触发双击信号要不然就触发两次单击。这个值在Windows上默认是500ms在Mac/Linux上默认是400ms我们暂时不考虑更改这个值但这个值对我们有用。 解决思路也不难触发单击的时候等待这个时间间隔如果间隔内触发了双击就拦截单击信号否则放行。 // 推荐做法使用系统间隔 connect(m_timer, QTimer::timeout, this, MyClass::handleSingleClick); m_timer.setSingleShot(true); m_timer.start(QApplication::doubleClickInterval()); // 关键点总结 1、如果你遇到了非解决不可的场景可以考虑我的方法如果你对这个场景无所谓就无需关心。
http://www.w-s-a.com/news/2987143/

相关文章:

  • 用seo对网站做分析企业邮箱注册登录入口
  • 长宁网站制作营销案例100例小故事
  • 易语言对做网站有什么帮助家装设计网站开发
  • 长沙住房建设部网站网站是怎么做新手引导
  • PHP网站开发实例教程电子书电商网站建设 教学总结
  • 郴州网站建设服务网上青年团智慧团建登录
  • 学做php网站抖音广告推广
  • 门户网站建设工作没有公司做网站犯法吗
  • 巢湖路桥建设集团有限公司网站rp网站自动跳转图片怎么做
  • 网站制作定制图东莞公共资源交易中心
  • 网页设计制作网站模板免费WordPress目录加密
  • 怎么样用dw做网站新冠疫苗接种查询
  • 网站 免备案百度 wordpress
  • 网页设计感十足的网站遵义网站建设oadmin
  • 网站建设宣传河北省住房与城乡建设厅网站
  • 上海营销型网站自己做网络推广怎么做
  • 银川网站设计公司零基础免费学编程app
  • 昆山网站建设推广杭州手机网站开发
  • 做游戏直播那个网站个人制作网站多少钱
  • 西宁建设公司网站成都十大景观设计公司
  • 学做室内效果图的网站网站优化做网站优化
  • 网站建设需要用到的软件网易云音乐网站开发介绍
  • wordpress vipseo搜索引擎优化工资多少钱
  • 织梦网站栏目网站开发设计框图
  • 实时网站推广的最终目的是宁夏建设职业技术学院官方网站
  • 可以申请免费的个人网站吗阿里云建站售前咨询
  • 网站开发怎么人员组织深圳网站开发建设培训
  • 怎样做网站公司的销售wordpress首页静态化生成
  • 网站维护会导致打不开网页吗?知更鸟wordpress中文
  • 哈尔滨做平台网站平台公司做网站还有开发文档吗