实测:800x600 的 QMainWindow 五区几何是 menuBar 800x17 / toolBar 800x27 / 中央 628x492 @(86,44) / 左右 dock 各 80x36 / statusBar 800x22,dock 与中央之间固定被 6px 把手吃掉;藏掉 dock 中央从 514 涨到 600(+86),藏掉菜单栏只省 17px;saveState() 存 2 个 dock + 1 个工具栏是 177 字节且能 restore 成功;QDialog::exec() 在 6.9 返回的是 int(写 QDialog::Result 直接编译报错),done(3) 就返回 3;setModal(true)+show() 会让 activeModalWidget() 指向对话框,但在 exec 循环里 sendEvent 给父窗口的按钮三种模态全都拦不住(clicked 照样 =1)——模态拦的是平台输入路由,不是 Qt 的派发层;QSettings 写 5 个键 79 字节,remove() 后落盘 15 字节,但 setValue(key, QVariant()) 不删键而是写出一行 a=@Invalid()。
实测:QPushButton 空文本 sizeHint 62x20、写"确定"变 80x20,QLineEdit sizeHint 210x22 但 minimumSizeHint 只有 18x20——差 11.7 倍,这就是它能被压扁的原因;600px 宽的 QHBoxLayout 里 stretch=(1,2,3) 精确分出 100/200/300,而 (0,0,1) 给按钮是 80/80/440、给裸 QWidget 是 0/0/600,卡住下限的是 minimumSizeHint 不是 stretch;QSizePolicy::Expanding 真实数值是 7、Ignored 是 13(不是文档顺序里的 6 和 7);100px 的叶子控件外面套 4 层 margin=11 的布局,minimumSize 从 122x42 一路涨到 210x130,清成 0 后回到 100x20;不换行的 25 短语中文标签把布局顶成 1800px 宽,开了 wordWrap 后 minimumSizeHint 塌回 12x12;nextInFocusChain 的环里连 NoFocus/disabled/hidden 的控件都在;1000 个控件 addWidget 摊 4.05 µs/个、首次布局 25.6 µs/个。
实测:一次 sendEvent 派发 49–55ns,postEvent 入队加排空 290ns(5.9 倍);忙等 200ms 错过 20 个 10ms tick、事后只补发 1 个事件(错过的 tick 不补帧);VeryCoarseTimer 把 300ms 变成 1000.9ms(3.3 倍),CoarseTimer 的 50ms 实测 62.6ms(+25%);Windows 的 15.6ms tick 困不住 Qt——Sleep(1) 实测 14.9ms,而 QTimer(1ms) 是 1.05ms,因为有活动定时器时进程分辨率被抬到 1ms(tick 里 Sleep(1)=1.63ms);槽里调 processEvents() 每层重入吃 13.3KB 栈,60 层就是 786KB;1000 次 update() 只换来 1 次 Paint,500 次 resize() 却产生 499 个 Resize 事件。
实测:Q_OBJECT 让 108 行头文件膨胀成 1109 行 C++、单 TU 编译 +26%,但对象体积一字节不加;忘跑 moc 的签名是 `undefined reference to 'vtable for Widget'`;CMAKE_PREFIX_PATH 不写,CMake 会静默挑中另一套 Qt 再在链接期炸出 3 条 __imp_ 未定义引用;w.show() 返回 0.0ms 且一次 Paint 都没派发。
实测:不带类型码前缀的裸字符串 connect 恒失败并报 `Use the SIGNAL macro to bind ...`;宏式 connect 比函数指针版贵 2.7 倍、字符串版贵 4.0 倍、拼错名字再贵 4.6 倍;emit 每多一个连接 +15–22ns,跨线程入队是同线程的 15–21 倍;`QMetaObject::Connection` 在 6.9 已无 `isValid()`;`connectSlotsByName` 重复调用会把同一个槽接两遍;`property()` 比直接 getter 慢 120 倍且代价随属性在表里的**位置**线性上涨。