发布日期:2025-10-11 06:46浏览次数:
今天翻硬盘看到个老项目,突然想起来该聊聊Qt开发踩过的坑了。当初接手公司那套破设备管理系统,一打开工程我脑瓜子嗡嗡的——点个查询按钮卡三秒,表格滚动跟幻灯片似的,老板拍桌子骂街的场景现在还历历在目。
那天下午直接泡了杯浓茶,把Qt助手文档钉在屏幕上逐字啃。翻了仨钟头突然开窍:问题就出在数据库操作怼主线程上了!用户输完搜索条件点查询的瞬间,整个界面冻得像冰箱里的带鱼。立马打开工程把QSqlDatabase扔进QThread里,connect信号槽时手抖了下,第五个参数必须勾Qt::QueuedConnection,这步漏了直接闪退给你看。
半夜两点测试时手都在抖——点查询按钮瞬间显示等待光标,三秒后表格哗灌满数据,主界面居然还能拖动窗口!当时激动得把保温杯都碰洒了。
后来改权限模块更离谱,二十几个复选框勾选时都要刷新界面。原方案是每个checkbox写个槽函数,跟老太太裹脚布似的又臭又长。直接掏出lambda大法,在初始化循环里猛敲:
foreach(QCheckBox box, permissionBoxes) {
connect(box, &QCheckBox::stateChanged, [=](int state){
updatePermissionMatrix(box->text(), state);
calculateUserLevel();
原来八百行的函数直接缩成三十行,变量捕获就用等号最省事。测试时候狂点复选框,权限矩阵唰唰实时刷新,代码量少了好几个K。
最血泪的教训是自适应布局。早期傻乎乎用绝对坐标setGeometry,客户换个大屏显示器整个界面散架得像被车碾过。后来在UI文件里按住Ctrl全选控件,右键点"布局->栅格布局",再拖个弹簧控件填空白。重写resizeEvent?完全没必要!
某次演示前突然要加个统计面板,原以为得大动干戈。结果在网格布局里右键"插入行",塞进QChartView组件,设置好大小策略,运行起来新旧组件自动等比拉伸——客户还以为早就有这功能!
有次见客户工厂操作工戴厚手套点按钮费劲,周末窝家里继承QPushButton写了个超大号按钮控件:
周一直接把MyHugeButton类扔进工程,拖到界面上改下文字就能用。后来被总工发现,全厂的触摸屏程序都换了这个控件,老师傅们再也没骂过点不准。
搞Qt这么多年摸出个真理:别跟框架较劲。多线程卡顿就拆线程,信号槽啰嗦就用lambda,界面散架就拥抱布局管理器。前两天看新人在那吭哧吭哧写代理类,一巴掌拍他后脑勺:“connect第五个参数吃干饭的?” 这小伙子现在见我都绕着走。