QCheckBox的三态复选框以及反选在使用这个控件的时候,需求有可能是:点击复选框实线反选,并且选中项目的时候需要显示未选中、部分选中和全选。在这个需求当中,首先想到的是直接启用三态复选框,但是点击的时候就变成了可以点三次,这就和反选冲突了。
1.QCheckBox的三种状态:12345enum CheckState { Unchecked, PartiallyChecked, Checked};
2.如何启用三态复选框使用setTristate(true)即可开启,使用void QCheckBox::setCheckState(Qt::CheckState state)参数为Qt::PartiallyChecked也会启用三态
3.如何实现需求显示选中状态:选择项目的时候根据选中情况设置QCheckBox的状态(如在QListView中可以通过QItemSelectionModel::selectionChanged信号实时统计)
123456789101112if (selectedItems == 0){ ui->ch ...
Qt高性能列表控件之QListView的使用及优点1.高性能列表如何能实线高性能?高性能列表无非就解决两个痛点:
数据存放在哪里
数据如何展示
为何QListWidget就不能高性能呢?QListWidget 是一个方便的控件,它内部管理了一个项目列表,并提供了一些简单的接口来添加、删除和修改这些项目。但没有对数据存储和数据展示进行过多的优化,这种方式适合于简单的应用场景,其中列表的大小不会很大,因为每个项目都会被存储为一个 QListWidgetItem 对象。
在QListView体系里,QAbstractListModel解决的是“数据存哪”,解决的是第一个问题,而QAbstractItemDelegate解决的是数据“如何展示”,解决的是第二个问题。
2.QListView和QAbstractListModel解决数据存哪这里就不从QAbstractListModel派生写自定义的类了,直接使用Qt从QAbstractListModel派生的类QStandardItemModel
123456789101112131415161718192021222324252627282 ...
自定义摇杆今天做项目的时候,接到一个需求,需要做一个摇杆去控制物体的移动,功能还是挺复杂的
1.功能:
点击内圈发送一次对应的方向的信号
松开鼠标的时候如果在内圈就发送结束信号(第一第二点总结起来就是按下跑,松开停)
松开的时候如果鼠标位置在外圈,就不发送结束信号,一直跑
点击结束按钮或者内圈范围都会发送信号
直接上图原始状态:
持续行走状态:
2.代码DirectionalControl.h头文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#ifndef DIRECTIONALCONTROL_H#define DIRECTIONALCONTROL_H#include <QWidget>#include <QMouseEvent>#include <QPainter>#include <QPushButton>#includ ...
QT详解
Qt 可以做什么?
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。 总起来说,Qt 主要用于桌面程序开发和嵌入式开发。
Qt 来开发 Windows 桌面程序有以下优点:
简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Windows API。
资料丰富:资料丰富能够成倍降低学习成本,否则你只能去看源码,关于 DirectUI、Htmlayout、aardio 的资料就很少。
漂亮的界面:Qt 很容易做出漂亮的界面和炫酷的动画,而 MFC、WTL、wxWidgets 比较麻烦。
独立安装:Qt 程序最终会编译为本地代码,不需要其他库的支撑,而 Java 要安装虚拟机,C# 要安装 .NET Framework。
跨平台:如果你的程序需要运行在多个平台下,同时又希望降低开发成本,Qt 几乎是必备的。
学习 ...
1. 概述命名,是计算机史上最难的问题之一,有很多书本都有专门的章节讨论命名规范的问题,鄙人写的总结,是作为一名刚毕业的黄毛小子从刚工作开始积累的,可能没有那些名著写的那么详细,但是贵在真实,我觉得还是有点使用价值的。
我觉得给代码命名有三要:
要有区分度
要有辨识度
要够详细(最少的字表达最清楚的意思)
不要造字,你不是仓颉,英语里面有约定俗成的名称缩写,如info->infomation。
不要为了规范而规范。
目的:不影响理解、不产生歧义、不增加维护成本足以
旨在提高代码的可读性、可维护性,特此制定本规范。参考《Googe C++ Stye Guide》以及《Effective C++》等规范基础上,结合项目开发经验,汇总整理成本规范。
2. 头文件2.1 头文件保护所有头文件都应该使用**#define**防止头文件被重复包含,命名格式为_H,例如:
1234#ifndef MAINWINDOW_H#define MAINWINDOW_H#endif // MAINWINDOW_H
2.2 前置声明“前置声明”是类、函数和模板的纯粹声明,没伴随着其定义。
...


