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

kaa*_*kaa 5 qt

我研究 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 ); 
Run Code Online (Sandbox Code Playgroud)

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

The*_*ght 2

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

为了更改 QGraphicsItem 的大小,您需要从 QGraphicsProxyWidget 派生并重写其boundingRect()函数。

然后,您可以创建一个调整大小函数来更改返回的矩形,但请确保首先调用prepareGeometryChange

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

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

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