1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include <QtGui/QApplication>
#include <QGraphicsScene>
#include <QGLWidget>
#include <QDialog>
#include <QGraphicsProxyWidget>
#include <QGraphicsView>
#include <QPainter>
class my_scene : public QGraphicsScene
{
public:
explicit my_scene(QObject *parent = 0) :
QGraphicsScene
(parent)
{
QDialog *widget = new QDialog;
widget->resize(50,50);
QGraphicsProxyWidget *widgetp = new QGraphicsProxyWidget();
widgetp->setWidget(widget);
widgetp->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
addItem(widgetp);
}
void drawBackground(QPainter *painter, const QRectF &rect){
painter->beginNativePainting(); //>= 4.6 only
glClearColor(0.4,0.4,0.4,1.);
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, painter->device()->width(),painter->device()->height());
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glOrtho(-1.0,1.0,-1.0,1.0,-50,50);
glMatrixMode(GL_MODELVIEW);
glColor3f(1.,0.,0.);
glBegin(GL_LINES);
glVertex2f(-1.0,0.0);
glVertex2f(1.0,0.0);
glEnd();
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
painter->endNativePainting(); //>= 4.6 only
painter->setPen(Qt::blue);
painter->drawLine(0,0,200,200);
}
};
class Widget : public QGraphicsView
{
public:
Widget(QWidget *parent = 0) :
QGraphicsView(parent)
{
QGLWidget *widget = new QGLWidget(QGLFormat(QGL::SampleBuffers));
widget->makeCurrent();
my_scene *s = new my_scene;
setViewport(widget);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
setScene(s);
resize(200,200);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
} |
Partager