专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

QRowTable表格控件重写表头排序支持第三次单击恢复默认

  一、原生表格
  开发客户端程序的方式越来越多了,现在很流行的libcef、electron等等都可以作为快速开发客户端软件的方案,但是如果需要一个好的用户体验,还是离不开原生化的开发,虽然慢,但是性能好啊。
  说到原生化开发,那对应的UI库相对较多,流行的就有Qt、soui、duilib、还有老掉牙的MFC和其他一些第三方公司开源维护的directUI库等等。网上找到一篇整理的文章,有兴趣的同学可以参考C界面库。
  目前C客户端使用最广泛的就是UI框架就是Qt,它不仅包含了GUI控件,更多的其实是一种解决方案,使用过Qt的同学都比较清楚,Qt的安装动态库有几十个之多,可是如果你只想使用Qt的GUi模块的话,就只需要包含3个动态库即可,他们分别是核心模块QtCore、Gui模块QtGui和QtWidget。
  当我们将Qt作为我们的开发SDK时,大多数时候原生的控件qss美化就可以完成我们的需求,然而总有一些特殊情况,比如产品经理脑残的时候、或者说是业务场景傻逼了,总是需要完成一些奇奇怪怪交互,那么我们就需要重写原生的控件实现方式。
  今天就来说一个案例表格控件列排序方式。
  对于某一些特殊的场景下,我们的表格展示的数据可能需要排序,这样的表格控件Qt已经给我们提供好了,只需要我们从写一些类和接口即可。前边已经写了4篇关于表格控件的功能,分别是QRowTable表格控件支持hover整行、checked整行、指定列排序等、QRowTable表格控件(二)红涨绿跌、QRowTable表格控件(三)效率优化之合理使用QStandardItem和QRowTable表格控件(四)效率优化之优化数据源,感兴趣的同学可以去看看。
  不幸的是Qt自带的表格排序功能,即是我们冲写完所有接口依然不能满足负责的业务需求表格表头连续3点三次是一个循环,什么意思呢?
  传统表格排序
  Qt自带的表格排序行为是这样的,默认情况是不排序的,我们可以通过接口开启排序,或者通过接口设置不排序,当我们启用排序规则后,假设说我们的表格点击点击一下是降序,点击第二下就是升序,再次点击是又会恢复到降序规则,这样是不是还挺完美呢!
  这个时候产品有话说了,点击第三次时,需要设置程序为不排序。
  程序员:卧槽你说什么听不到
  【领QT开发教程学习资料,点击下方链接免费领取,先码住不迷路】链接
  新的排序规则
  在传统表格排序的基础上做一下调整可以支持某些列不允许排序3次连续单击为一个循环,也就是降序升序无序这样3个状态循环
  不得不说产品的脑洞还是很大的。既然产品都说想要这个功能了,那么有时间还是得考虑下。跟产品沟通良久后,有了如下安排,虽然这个功能对用户来说不是一个特别需要的功能,但是当我们的软件功能稳定后,迭代没有那么着急的时候,是不是可以考虑研究下这个而功能呢。
  然后也就有了本篇文章
  虽然重写了Qt本身的逻辑,没想到还是可以实现的!!!二、效果展示
  按照惯例先上图,看看是不是同学们想要的功能。
  三、实现方式
  新的表格排序有2个点需要我们去思考,分别是某些列排序、排序交互修改,下面我们分开来去实现1、排序列定制
  Qt默认提供了可排序接口,但是开启后我们所有的列都支持排序了,这个时候我们就需要研究Qt的源码,看看Qt的排序是怎么触发的,然后在合理的时机去加上我们不支持排序的逻辑
  博主这里找到的做法是重写QHaderView这个类,并重写实现了鼠标按下并抬起的接口,在这个接口中判断我们业务层是不是允许排序。
  重写后的逻辑是这样的如果不允许排序,我们先调用Qt原有的接口禁用所有列排序功能调用父类的鼠标抬起函数如果不允许排序,需要调用Qt原有的接口启用所有列排序功能
  以上逻辑的步骤2是原有的逻辑,步骤1和步骤3分别是在进行业务逻辑判断后进行的逻辑调整,达到我们禁用某些列排序的功能voidQRowHeader::mouseReleaseEvent(QMouseEventevent){intcolumnlogicalIndexAt(eventpos()。x());if(mIndicator。contains(column)mIndicator〔column〕falseqAbs(eventx()mpPressPos。x())QApplication::startDragDistance()非拖拽){setSectionsClickable(false);QHeaderView::mouseReleaseEvent(event);setSectionsClickable(true);}QHeaderView::mouseReleaseEvent(event);。。。
  如上代码,mIndicator结构中存储了我们想要定制的是否允许排序的列,只需要对外暴露一个修改接口即可,代码是不是还很简单呢。voidQRowHeader::SetSortEnable(intlogicalIndex,boolenable){mIndicator〔logicalIndex〕enable;}
  这样禁用某些列排序的功能就是实现了。
  禁用某些列排序这个功能相对来说好实现一些,毕竟重写的逻辑不是特别复杂,下面我们来看下怎么修改排序交互逻辑。2、排序交互修改
  有了前面的问题处理思路,这个功能依然如此,我们先跟Qt源码,看看已有的排序交互逻辑实现怎么实现的,然后在合理的实际去重置某些变量的值,达到重写交互逻辑。
  博主这里跟踪完Qt默认的排序实现方式后,发现重写这个功能还是有一定难度的,首先数据排序是一块,另一块是一旦启用排序后,排序箭头的绘制这块也需要去重写。
  什么意思呢?
  Qt的排序规则一旦启用,排序的箭头就会被绘制,并且绘制箭头的逻辑还简单粗暴,不是升序就是降序。
  【领QT开发教程学习资料,点击下方链接免费领取,先码住不迷路】链接
  且看如下Qt表头绘制源码
  如果显示排序箭头并且是排序列,则需要绘制排序箭头,不是降序就是升序
  我:我槽什么鬼,就不能提供一个空的枚举吗?voidQHeaderView::paintSection(QPainterpainter,constQRectrect,intlogicalIndex)const{。。。if(isSortIndicatorShown()sortIndicatorSection()logicalIndex)opt。sortIndicator(sortIndicatorOrder()Qt::AscendingOrder)?QStyleOptionHeader::SortDown:QStyleOptionHeader::SortUp;。。。}
  既然这条路子是走不通了,那么我们只能取巧,换其他方式。
  终于、皇天不负有心人被博主想到一个好办法,代码量依然还是很少。
  回到我们最开始的需求,我们其实就是想让第三次点击时,只是一个特殊的操作,然后把第四点击当做第一次单击即可。
  有了这个想法后,那么就来干吧,既然还是重写鼠标抬起函数,想尽一切办法监控连续的第三次单击,把他处理成非排序状态,然后在下一次单击时,走正常的排序逻辑。voidQRowHeader::mouseReleaseEvent(QMouseEventevent){。。。QHeaderView::mouseReleaseEvent(event);columnlogicalIndexAt(eventpos()。x());staticboolnextNoSortfalse;staticintprevColumn1;if(nextNoSortprevColumncolumnqAbs(eventx()mpPressPos。x())QApplication::startDragDistance()){emitRestoreSort();恢复默认排序}if(nextNoSort!trueprevColumncolumnsectionsClickable()sortIndicatorOrder()Qt::DescendingOrder){if(qAbs(eventx()mpPressPos。x())QApplication::startDragDistance()){nextNoSorttrue;prevColumncolumn;}else{nextNoSortfalse;}}else{if(nextNoSortqAbs(eventx()mpPressPos。x())QApplication::startDragDistance()){nextNoSorttrue;}else{nextNoSortfalse;prevColumncolumn;}}。。。}
  好了,代码以上。不过这里重点还是要说下为什么这么干!
  首先需要调用父类的mouseReleaseEvent函数,否则拖拽会有问题,而且必须调用这个函数才可以让内存数据正常。
  然后我们记录了一系列内存状态,判断是不是需要恢复排序状态,当条件满足时发出RestoreSort信号,外部程序只需要接收这个信号,然后恢复默认排序即可。
  恢复默认排序voidQRowTable::RestoreSort(){mpFilterSetCompareType(QFilterModel::CTNULL);mpFilterinvalidate();mpHHeadersetSortIndicator(1,Qt::DescendingOrder);}

892页25万字智慧城市云计算大数据中心项目深化设计方案WORD原文智慧城市云计算大数据中心项目深化设计方案WORD格式,892页,约25万字。更多参考智慧城市云计算大数据中心建设是在国家省市有关智慧城市政策指导下,基于现有市信息化建设成果基础博主中国女足主力中卫王晓雪在外手术和康复,100无缘世界杯直播吧3月2日讯据博主莱斯特城的小狐狸报道,此前热身赛中受伤的中国女足主力中后卫王晓雪,将无缘今夏的女足世界杯。此前随中国女足赴西班牙拉练期间,王晓雪在中国女足00战平爱尔兰女足的现在买4G手机还是5G手机?强烈建议买5G手机想一下,现在都有千元的5G手机了,苹果也要出5G的手机了,这个趋势,恐怕是逆转不回去了吧。再说了,4G用不了5,5G却能用4G,两者钱也没差太多,你说买哪个?2023年了,目前5G最便宜的3款12512手机!摩托罗拉S30冠军版骁龙888虽然发热控制的一般,但日常使用还是可以。重202g搭载6。8英寸居中挖孔直屏全程DC调光低蓝光护眼SGS认证,支持144Hz刷新率。拍照方面搭载了一亿2022年绿色出行十佳传播案例公布支付宝绿色出行百城联动计划等项目获评日前,由中国交通报社主办的2023年绿色出行政企对话会在北京举行。活动现场,交通主管部门研究机构相关企业媒体代表围绕绿色出行创建的常态化机制进行了现场讨论与交流。在此次对话会上,还2023年OPPO一加realme手机选购指南(二)三OPPO一加realme机型选购推荐1选购建议文章并没有把所有OPPO一加realme机型都列出来,剔除了不值得买的机型,文中列出的每款机型都是在该价位段比较值得购买的,没有一款环境企业如何实现二次增长2023环境企业家媒体见面会在京召开3月1日,由环境商会主办的2023环境企业家媒体见面会在京召开,主题为后疫情时代,环境产业如何打造二次增长曲线。环境商会秘书长会议主持人马辉介绍,经过二十多年发展,环境产业逐渐进入老用户久等!MIUI14正式版终于轮到小米11系列,骁龙888满血复活这么多年过去,大家对于苹果手机的评价还是,系统好芯片好。所以我一直希望,国产品牌可以在系统流畅度上,多做优化,这样才能和苹果抗衡。而作为和苹果对标的先锋队,小米前段时间发布了MIUiPhone14为何频频降价?手机卖不动只是幌子,小米11用户道出实情不知道大家有没有发现,苹果手机这两年也不太好过了,一方面小米高端步步紧逼,另一方面消费者购买苹果手机热情降低。所以iPhone14系列首发便破价发售,着实让网友吃惊。不仅仅是首发降朱婷回归不误世联赛,国家队阵容露出端倪,主攻位置竞争激烈中国女排公布了2023年第一期的23人集训名单,其中丁霞吴梦洁缪伊雯曾洁雅和陈曦悦这五人暂不参加集训,所以现在参与国家队集训的球员有18人。不过按照常规,很多国际比赛限定的参赛人数京都大学去除SiC氧化膜界面缺陷的解决方案在SiC晶圆和晶体管的制造过程中,需要对SiC表面进行氧化,碳化硅MOSFET热氧化过程中,会在表面形成SiO2氧化膜,这被视为SiC的一大优点。但此时氧化膜与SiC之间的界面会出
教学如何在iPhone上镜像操作AppleWatch?相信大家有时会想要在AppleWatch上进行较长时间的操作,但每当你想要使用AppleWatch时,都需要使用两只手来进行,加上显示屏较细小,使用时间一长,用户就会容易疲累,现在冷到不敢伸手,这一锅暖呼呼太治愈!有块豆腐就搞定长大的证据又多了一条少女时期怕显腿粗,打死不穿秋裤,时不时会被妈妈抽查。现在一降温,秋衣秋裤赶紧往身上招呼,舒服最紧要。还会学着妈妈的样子,把砂锅支起来。砂锅保温性好,慢慢吃也不打肚包肉,做法步骤详细讲解,皮弹肉嫩,真解馋,学会过年给家人做马上过年了,今天分享给大家一个好吃肚包肉,操作非常简单,招待亲戚朋友也倍有面子,好了,废话不多说,下面是详细的做法步骤。先准备一块梅花肉,改刀切成小块,放入五香五香粉,再来一点食用人际交往的10条原则2022生机大会1人际交往的出发点和最终目的,90都是利益交换。真跟你谈感情的,是少之又少。2你别试图去说服任何人,那根本无法做到。即使有个人被你说服了,那只能说明你的观点符合他的Qt5QMediaPlayer音乐播放器1先上效果图好了,现在讲讲我是怎么写的吧,首先最基本的播放歌曲代码应该就是QMediaPlayermusicnewQMediaPlayer(this)初始化音乐QMediaPlay安息日怎么改到了星期日?安息日怎么改到了星期日?要搞清楚这个问题,首先我们要了解最早遵守安息日的是哪些人呢?是犹太人。据历史记载,安息日早在犹太民族诞生前2300年就被设立了。最早的犹太民族就是以色列,历不说再见的第23和24集观后感这两集延续了上一集,还是一群戏精,在演戏中戏,这个局布得有点大啊!之前还觉得黎二哈没入戏呢,今晚被黎二哈的演技折服了,演得真真假假的,差点连我都相信啦,似乎他说的很多都是真心话。同2004年,张歆艺和王志飞同居七年,王志飞转身娶了小15岁的张定涵2004年,23岁的张歆艺爱上了39岁的王志飞,当时王志飞已经与李健结婚多年,还生了一个儿子叫王也。与张歆艺同居七年后,王志飞突发声明两人分手,转身娶了小15岁的张定涵,张歆艺则嫁2003年撒切尔夫人去世,她葬礼上为何有很多大学生在庆祝她的死?在我这个时代没有女性将成为首相或者外交大臣,不可能出任这些最高级的职位。不管怎样,我不想当首相,但是你该对自己有百分百的自信。撒切尔夫人作为英国第一位女首相,撒切尔夫人手腕强硬。无大学生买一块学习平板,华为平板可以吗?还是选三星或苹果?大家好,我是摆地摊的西瓜君。今天给大家分享一下,大学新生想要买一款学习平板的话,日常主要需求就是拿来记笔记上网课,目前华为苹果三星这三个平板品牌里面应该如何选择最适合自己的平板。这婆婆给新生儿喂米糊,产妇失声痛哭,引来网友口诛笔伐广东的一位婆婆出名了,因给出生9天的婴儿喂米糊称咱这风俗就是这样!视频一经发出立刻火遍全网,引发了广大网友的热烈讨论,关于新生儿能不能吃米糊的争议此起彼伏。12月10日,广东梅州一
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网