QT开发技巧记录

窗口场景‌

标准主窗口场景‌
若需要包含菜单栏、工具栏、状态栏等标准组件,应继承QMainWindow
若仅作为普通窗口容器,则继承QWidget。
基本容器:QWidget适用于简单界面
完整窗口:QMainWindow适用于需要标准菜单栏的复杂界面
根据实际界面复杂度选择基类类型,若需实现多文档界面(MDI)或标准菜单操作,应优先使用QMainWindow。

特性QMainWindowQWidget
预置菜单栏支持原生支持需自定义实现
中央部件区域预留中央Widget区域无特殊区域划分
停靠窗口支持支持QDockWidget不支持
最小代码量适用于复杂界面适合轻量级窗口

QSplitter

QSplitter用于管理子部件的大小,用户可以拖动边界调整。 通过QSplitter实现灵活的区域划分,在保留Dock特性的同时确保获得最大展示空间。
使用QSplitter而非直接使用布局管理器,可实现用户自由调整区域大小,实现可调节分割布局
通过setStretchFactor控制初始比例分配
设置setChildrenCollapsible(false)防止区域被完全关闭

参数/方法作用说明对应XML属性
QSplitter(Qt::Vertical)创建垂直方向分割器容器,子部件上下排列orientation=“Vertical”
addWidget()按添加顺序排列组件(第一个添加的在上方)widget class属性
setStretchFactor()设置伸缩比例,参数1为组件索引,参数2为比例值(建议总和为3或4的倍数)
setObjectName()设置组件在XML中的标识符(非必须但建议保持与设计一致)name属性

性能优化措施‌

‌地图渲染‌:采用OpenGL加速的QGraphicsView
‌数据同步‌:使用QSharedMemory实现进程间通信
‌内存管理‌:对高频更新的设备状态采用对象池模式

对象命名规范‌:

所有核心组件必须设置唯一的objectName
命名规则:类型_功能,如dock_taskList

窗口管理策略‌

单例模式:通过static指针确保每个窗口只创建一次
内存管理:设置WA_DeleteOnClose属性保证窗口关闭时自动释放

window->setAttribute(Qt::WA_DeleteOnClose);

窗口激活控制‌

window->show();
window->raise(); // 置于顶层
window->activateWindow(); // 获取焦点

Dock控件管理策略‌:

使用QSplitter实现动态分割布局,允许用户调整各区域大小
设置最小宽度限制防止面板过度收缩:setMinimumWidth(300)

内存管理

使用QSharedPointer来管理窗口的资源,QSharedPointer是自动管理内存的,当窗体析构时,如果这些QSharedPointer是最后一个持有该对象的指针,它们会自动删除所指向的对象,不需要手动调用deleteLater。
通常单例的析构由单例自己管理(例如使用静态成员变量,在程序结束时由系统自动回收)。如果单例模式中使用了动态分配且没有自动清理的机制,那需要在析构函数中处理。
析构函数中调用saveWindowState(),是为了在程序退出时保存窗口状态,在closeEvent中已经调用了saveWindowState(),而析构函数是在窗口关闭之后调用的,所以实际上closeEvent已经保存了状态。不过,为了确保在非正常关闭(如直接析构)时也能保存,这样做是安全的。
如果程序通过正常关闭(即用户点击关闭按钮),closeEvent会被调用,然后析构函数再被调用,这样就会保存两次。为了清晰,可以考虑只在closeEvent中保存,而在析构函数中不保存。然而,closeEvent可能不会被调用(例如MainController被直接删除而不是关闭),所以保留析构函数中的保存也是合理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值