找回密码
 立即注册
收起左侧

怎样在QVBoxLayout布局里获得部件的位置信息

2
回复
920
查看
[复制链接]

尚未签到

来源: 2023-7-9 05:57:39 显示全部楼层 |阅读模式
1Qter豆
怎样在QVBoxLayout布局里获得部件的位置信息?我用 findChildren 无法获得布局里的部件!为空

回复

使用道具 举报

累计签到:5 天
连续签到:5 天
2023-7-28 13:38:59 显示全部楼层
在`QVBoxLayout`布局中,可以使用`itemAt()`方法来获取布局中指定索引处的部件(`QLayoutItem`),然后通过`geometry()`方法获取该部件的位置信息。
首先,确保在布局中正确添加了部件。如果使用`addWidget()`方法将部件添加到`QVBoxLayout`中,那么它们会被正确地管理。
接下来,可以通过以下方法来获取布局中部件的位置信息:

QVBoxLayout* layout = new QVBoxLayout(); // QVBoxLayout 实例
int index = 0; // 想要获取位置信息的部件在布局中的索引

if (index >= 0 && index < layout->count()) {
    QLayoutItem* item = layout->itemAt(index);
    if (item) {
        // 获取部件的位置信息
        QRect itemGeometry = item->geometry();
        int x = itemGeometry.x();
        int y = itemGeometry.y();
        int width = itemGeometry.width();
        int height = itemGeometry.height();

        // 现在可以使用 x、y、width 和 height 变量,来得到部件的位置和大小信息
    }
}


确保`index`的范围在布局中存在的有效部件索引之内(即0到`layout->count() - 1`之间)。如果`index`超出范围,`itemAt()`将返回`nullptr`,因此需要先检查返回值是否有效。
如果部件是通过`addWidget()`添加到布局中的,那么`QVBoxLayout`会自动管理这些部件的位置和大小,无需手动计算它们的位置。这段代码仅适用于在布局中添加部件后,如果希望手动设置或获取特定部件的位置,可以使用`itemAt()`和`geometry()`方法。
如果在使用`findChildren`时遇到问题,可能是因为`findChildren`方法默认只查找子对象,而不会查找布局管理器中的部件。在布局中,部件实际上不是窗口的子对象,而是布局管理器的子对象。如果想使用`findChildren`来查找布局管理器中的部件,可以通过以下方式来实现:

QList<QWidget*> widgets = layout->widget()->findChildren<QWidget*>();

这里,`layout->widget()`将返回与`QVBoxLayout`关联的父部件,然后可以使用`findChildren`来查找这个父部件下的所有`QWidget`子对象,包括在`QVBoxLayout`中的部件。
回复

使用道具 举报

累计签到:472 天
连续签到:1 天
2023-8-9 19:23:58 显示全部楼层
直接获取小部件的Geomtry即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了