window frame 的影响
如果 widget 作为一个窗口(带有标题栏,最小化,最大化,关闭按钮),那么在计算尺寸和坐标的
时候就有两种算法.包含 window frame 和 不包含 window frame.
其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式来计算
的.
其中 geometry(),width(),height(),rect(),size() 则是按照不包含 window frame 的方式来计
算的.
当然,如果一个不是作为窗口的 widget,上述两类方式得到的结果是一致的
①在 Qt 中,关于位置尺寸,提供了很多的 API.
有的 API 的位置信息是以 Widget 本体左上角为原点的(不考 Window frame)
有的 API 的位置信息是以 window frame 左上角为原点的
geometry()
setGeometry()
都是不考虑 window frame
frameGeometry ()
setFrameGeometry ()
考虑 window frame
② 代码示例: 感受 geometry 和 frameGeometry 的区别
当前代码是放到了 构造函数 中
此时这个 Widget 对象正在构造
此时也就不具备 Window frame.
因此,此时还看不到 window frame 的影响
③在按钮的 slot 函数中,由于用户点击的时候,对象树已经构造好了,此时 Widget 已经具备了
Window frame,因此在位置和尺寸上均出现了差异
如果把上述代码修改成打印 pushButton 的 geometry 和 frameGeometry,结果就是完全相
同的.因为 pushButton 并非是一个窗口.