qtpropertybrowser弹窗位置控制

qtpropertybrowser是Qt属性树控件,有时候自定义弹窗编辑控件高度较大,视口下方无法容纳,则考虑将弹窗向上弹出。如果上方空间也无法容纳,则考虑将弹窗居中显示,大部分情况下视口的高度应该是够用的了。如果视口的高度也不够了怎么办?别瞎想了,要么调整视口高度(即调整QtTreePropertyBrowser控件的高度),要么重新设计弹窗编辑控件吧!

注:以上说的都是在属性树QtTreePropertyBrowser控件高度不可变时产生的困扰与解决方案

效果图

1、向下弹出(默认,第一优先级)
在这里插入图片描述
2、向下弹出(适应,第二优先级)
在这里插入图片描述
3、居中弹出(适应,第三优先级)
在这里插入图片描述
4、全不满足,依旧默认向下弹出(建议调整视口高度/重新设计弹窗UI)
在这里插入图片描述
核心代码

void QtPropertyEditorDelegate::updateEditorGeometry(QWidget *editor,
        const QStyleOptionViewItem &option, const QModelIndex &index) const
{
	Q_UNUSED(index)
	QWidget *viewPort = m_editorPrivate->treeWidget()->viewport();
	QRect rect = option.rect.adjusted(0, 0, 0, editor->minimumHeight() > option.rect.height() ? editor->minimumHeight() - option.rect.height() : -1);
	if (viewPort->rect().bottom() - option.rect.y() < rect.height())
	{// 如果底部空间不足,尝试判断顶部空间是否满足容纳弹出窗口
		if (option.rect.bottom() - viewPort->rect().top() >= rect.height())
		{// 顶部空间满足容纳弹出窗口
			rect.moveTop(option.rect.y() - (rect.height() - option.rect.height()));
		}
		else
		{// 顶部空间满足容纳弹出窗口,尝试在该列位置居中显示窗口
			if (viewPort->height() >= rect.height())
			{// 整体空间满足容纳弹出窗口
				rect.moveCenter(QPoint(option.rect.center().x(), viewPort->rect().center().y()));
			}
		}
	}

	editor->setGeometry(rect);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生卍流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值