我研究 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 中搜索,但找不到任何示例。
GraphicsItem 的大小(QGraphicsProxyWidget 派生的)由其边界矩形定义。我希望小部件的大小将定义其代理小部件的初始大小,因此您可以首先尝试更改实际的小部件。
为了更改 QGraphicsItem 的大小,您需要从 QGraphicsProxyWidget 派生并重写其boundingRect()函数。
然后,您可以创建一个调整大小函数来更改返回的矩形,但请确保首先调用prepareGeometryChange。
如果您确实从 QGraphicsProxyWidget 继承并以这种方式更改其大小,则所包含的小部件可能会或可能不会调整大小,具体取决于其实现。
我建议您首先尝试调整封闭小部件的大小。
另请注意,QGraphicsItems 存在一个 setScale 函数,这也可能是此处的一个选项,并且如果您从 QGraphicsProxyWidget 派生,则可以在绘图函数中缩放 QPainter。