QWidget 框架

Posted

技术标签:

【中文标题】QWidget 框架【英文标题】:QWidget framing 【发布时间】:2016-06-07 10:02:49 【问题描述】:

我了解小部件的坐标系是小部件的本地坐标系。 0,0 左上角。

我想在widget中画一个边框,但是使用rect()返回的QRect会导致右下角没有边框。

有一个名为“frameGeometry()”的方法,但是它返回的 QRect 与小部件不在同一个坐标系中,而是在父坐标系中。

有没有办法在本地坐标系中获取小部件的框架矩形。

我知道我可以翻译 frameGeometry() 或简单地创建一个新矩形:

    QRect(0, 0, width()-1, height()-1);

这是正确的做法吗?

【问题讨论】:

【参考方案1】:

小部件的画布很可能有一个填充,您需要从小部件的 QRect(描述小部件消耗的整体空间,包括所有边的填充)中减去该填充,以获得适合您的小部件的矩形。不过不确定具体的语法。

【讨论】:

谢谢,现在调查一下,有一种方法叫 contentsRect(),它返回的矩形和 rect() 和 contentsMargins() 一样,返回的边距都是 0。 当您读取小部件的 QRect 时,它必须有一个 BottomRight 点。它的坐标是小于小部件的高度和宽度还是一样?另外,我现在记得我的 VCL 小部件的问题是……他们有一个 ContentPane,它的边界矩形比小部件本身要小。您的小部件是否有类似的东西,即它们是面板式的吗?不知道你指的是哪种QWidget,所以自己查不出来。我的是对应 QPushButton 的 VCL 元素。 你说的很对,右下角是 1 个像素的插图。

以上是关于QWidget 框架的主要内容,如果未能解决你的问题,请参考以下文章

QWidget::geometry() 与 QWidget::frameGeometry()

基于Qt Qwidget 的一个简易界面框架,无边框

基于Qt Qwidget 的一个简易界面框架,无边框

基于Qt Qwidget 的一个简易界面框架,无边框

基于Qt Qwidget 的一个简易界面框架,无边框

从 MainWindow 内的 QWidget 内的按钮更改 MainWindow 小部件