QT5混合QML和opengl绘制

时间:2012-11-18 14:42:24

标签: qt opengl

我想混合opengl和QML的东西。我使用qt 5 beta 2。 我制作了一个极简主义的程序来告诉你这个问题:

main.ccp

#include <QGuiApplication>
#include "back.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Back b;
    b.setSource(QUrl("ui.qml"));
    b.show();

    return a.exec();
}

back.h

#ifndef BACK_H
#define BACK_H
#include <QtQuick>
#include <QtOpenGL>
#include <QTimer>

class Back :  public QQuickView
{
Q_OBJECT
public:
    ~Back();
    Back();
public slots :
    void paint();
};

#endif // BACK_H

back.ccp

#include "back.h"

Back::Back()
{
    setClearBeforeRendering(false);
    connect(this, SIGNAL(beforeRendering()), this, SLOT(paint()), Qt::DirectConnection);
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()), Qt::DirectConnection);
    timer->start(3000);
}

Back::~Back()
{
}

void Back::paint()
{
    glViewport(0, 0, 150, 150);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 150, 150,0,0,10);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3ub(255, 0, 0);
    glBegin(GL_QUADS);
        glVertex2i(0, 0);
        glVertex2i(100, 0);
        glVertex2i(100, 100);
        glVertex2i(0, 100);
    glEnd();
}

ui.qml

import QtQuick 2.0

Item {
    width : 150
    height : 150

    Rectangle {
         x : 50
         y : 50
         width: 100
         height: 100
         color: "green"
    }
}

第一张图片是正确的: 我有一个红色正方形,绿色正方形有偏移和黑色背景。 picture 1

3秒后,第二个是不正确的: 我只有背景的绿色广场 picture 2

有人知道我做错了吗?

0 个答案:

没有答案