QT 表格突然失效
复制本地路径 | 在线编辑
有一次突然遇到 QT 的表格突然失效了,表格里面的 button 或者 checkbox 都无法点击了,关键是也没有 setEnable(false) 之类的代码。
解决
DEBUG 了半天,发现居然是表格的高度宽度导致的这样,如果把高度和宽度调大,先不设置 setMaximum 或者 setFixed 之类的函数,表格就能正常点击。真的太奇怪了。注意点:
- 不仅仅是表格自身,可能外部其他的地方也会挤压表格,比如我是两张表格,第一张表格设定的固定大小,导致第二张表格就出问题了。甚至两张表格中间的 label 删掉就好了,很神奇
- 不仅仅是高度,宽度也有可能导致问题,真的奇怪...
原因推测
第一个思路是 QT 的显示和点击是两种逻辑,点击的时候是做了一个叫做 hit-test 的操作,各个控件本身有显示区域,同时还有一个叫做 viewport 的区域,只有在 viewport 里面的控件才会响应点击事件。
但是我把 viewport 显示出来(利用背景颜色),结果发现没问题,总之那天 DEBUG 了很久,也没找到最终原因,所以放弃了。只知道遇到这个问题,修改高度宽度能解决掉。
第二个思路是有组件重叠,但把各个的组件的背景颜色显示出来之后,没有问题。
第三个思路是 AI 也在说可能是没有用 Delegate 的原因,但后面改成使用 Delegate 还是不对。
给自己的话:下次遇到这个问题,想要去深度探索原因,先定个闹钟,不要再这个上面花太多时间。