在一些特殊的应用中比如平面游戏,地图应用等等当中,我们需要在场景中嵌入一些自定义的窗口。这时候我们就需要研究一下如何在QGraphicsScene中嵌入自己定义的窗口和控件了。其实QT已经提供了对应的实现方式了,通过QGraphicsProxyWidget作为代理我们可以将自己定义的窗口作为图元嵌入到QGraphicsScene中。这对于一些特殊的应用意义还是挺大的。具体的代理方式如下图所示:
通过这种代理的方式我们可以将QWidget的界面形式和QGraphicsScene组合到一起,实现很多种复杂的界面。这里简单写一个例子说明一下嵌入式窗口如何实现。
其中CustomProxy为代理图元,EmbeddedDialog为自定义的窗口
customproxy.h
#ifndef CUSTOMPROXY_H
#define CUSTOMPROXY_H
#include <QTimeLine>
#include <QGraphicsProxyWidget>
//添加代理
class CustomProxy : public QGraphicsProxyWidget
{
Q_OBJECT
public:
explicit CustomProxy(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
QRec