首页| 论坛| 消息

标题:Qt开发经验小技巧186-190
作者:liudianwu
日期:2021-11-30 09:24
内容:

186. 关于是使用QList还是QVector的问题,一直是众多Qter的选择问题,主要是这两个玩意提供的的接口函数基本一致,比如插入、删除、取值等。
- 大多数情况下可以用QList。像append、prepend、insert这种操作,通常QList比QVector快的多。
- QList是基于index标签存储它的元素项在内存中,比那种依赖iterator迭代的更快捷,而且你的代码也更少。
- 如果你需要一个真正的连接着的list,且需要保证一个固定插入耗时。那就用迭代器,而不是标签。使用QLinkedList()。
- 如果你需要开辟连续的内存空间存储,或者你的元素远比一个指针大,这时你需要避免个别插入操作,出现堆栈溢出,这时候用QVector。
- 如果更在意取值的速度则用QVector,QCustomPlot用的就是QVector,需要频繁大量的取出数据进行绘制。
- 如果更在意更新数据(添加、删除等)的速度则用QList,就因为QChart用的是QList存取数据,也是导致大数据量卡顿的原因之一,一直被诟病。
- 在数据量很小的情况下两者几乎没啥性能区别。
- 貌似Qt6对这两个类合并了(选择困难症的Qter解放了),QVector=QList即QVector是QList的别名,可能底层改了代码以便发挥两者的优势。
187. 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明。
- mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。
- 没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件。
- 启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。
- 部件方法hasMouseTracking()用于返回当前是否启用鼠标跟踪。
- setMouseTracking(bool enable)用于设置是否启用鼠标跟踪。
- 与鼠标跟踪相关的函数主要是mouseMoveEvent()。
- tabletTracking属性保存是否启用部件的平板跟踪,缺省是不起用的。
- 没有启用平板跟踪的情况下,部件仅接收触控笔与平板接触或至少有个触控笔按键按下时的触控笔移动事件。
- 如果部件启用了平板跟踪功能,部件能接收触控笔靠近但未真正接触平板时的触控笔移动事件。
- 这可以用于监视操作位置以及部件的辅助操作功能(如旋转和倾斜),并为图形界面提供这些操作的信息接口。
- 部件方法hasTabletTracking()用于返回当前是否启用平板跟踪。
- setTabletTracking(bool enable)用于设置是否启用平板跟踪。
- 与平板跟踪相关的函数主要是tabletEvent()。
188. 关于QTableWidget等控件调用自带的removeRow、clearContents、clear函数删除了里面的item ..

回复 发表
主题 版块