gpt4 book ai didi

qt - 如何在 QGraphicsScene 上创建可调整大小的自定义小部件

转载 作者:行者123 更新时间:2023-12-02 01:44:49 50 4
gpt4 key购买 nike

我学习 QGraphics 框架并想创建自定义可调整大小的小部件。

例如我用 QTextEdit 创建了一个代理小部件

QGraphicsLinearLayout* l = new QGraphicsLinearLayout;
QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget;
proxy->setWidget( new QTextEdit );
proxy->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
l->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
l->addItem( proxy );

QGraphicsWidget* w = new QGraphicsWidget;
w->setLayout( l );
w->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
w->setFlag( QGraphicsItem::ItemIsMovable );

scene->addItem( w );

小部件看起来不错,但我不知道如何添加调整其大小的能力。
我在 Qt 示例和谷歌中搜索,但找不到任何示例。

最佳答案

由 QGraphicsProxyWidget 派生的 GraphicsItem 的大小由其边界矩形定义。我希望小部件的大小将定义其代理小部件的初始大小,因此您可以先尝试更改实际小部件。

为了更改 QGraphicsItem 的大小,您需要从 QGraphicsProxyWidget 派生并覆盖其 boundingRect()功能。

然后你就可以创建一个调整大小的函数来改变返回的矩形,但要确保你调用 prepareGeometryChange第一的。

如果您确实从 QGraphicsProxyWidget 继承并以这种方式更改其大小,则封闭的小部件可能会或可能不会调整大小,具体取决于其实现。

我建议您首先尝试调整封闭小部件的大小。

另请注意,QGraphicsItems 存在一个 setScale 函数,如果您从 QGraphicsProxyWidget 派生,它也可能是此处的一个选项,并且能够在绘制函数中缩放 QPainter。

关于qt - 如何在 QGraphicsScene 上创建可调整大小的自定义小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296092/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com