QGraphicsView测试

举报
Amrf 发表于 2019/01/06 23:45:36 2019/01/06
【摘要】 想实现QOpenglWidget或者QGLWidget的透明效果,发现效果达不到预期,可以透明但是渲染顺序总是在其他普通控件之前.后来只能使用QGraphicView代替测试代码如下:class CEasyGLWidget : public QGLWidget{ Q_OBJECTpublic: CEasyGLWidget( const QGLFormat& format, QWi...

想实现QOpenglWidget或者QGLWidget的透明效果,发现效果达不到预期,可以透明但是渲染顺序总是在其他普通控件之前.

后来只能使用QGraphicView代替

测试代码如下:

class CEasyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
    CEasyGLWidget( const QGLFormat& format, QWidget* parent = 0  );

protected:
    virtual void initializeGL();
    virtual void resizeGL( int w, int h );
    virtual void paintGL();

    virtual void keyPressEvent( QKeyEvent* e );

private:
    bool prepareShaderProgram( const QString& vertexShaderPath,
                               const QString& geometryShaderPath,
                               const QString& fragmentShaderPath );

    QOpenGLShaderProgram m_shader;
    QOpenGLBuffer m_vertexBuffer;
    bool inited;

};


class CEasyGraphicsItem : public QGraphicsItem
{
    //Q_OBJECT

public:
    CEasyGraphicsItem(QWidget *parent = 0);
    ~CEasyGraphicsItem();

    virtual QRectF boundingRect() const;
    virtual void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );

private:
    CEasyGLWidget *m_OGLItem;
    QPixmap m_Pixmap;
    QImage m_Image;

};

class Md3View:public QGraphicsView,
        protected QOpenGLFunctions
{
public:
    Md3View( QWidget* pParent = 0 );
    virtual ~Md3View( void );
private:
    QGraphicsScene  *m_pMainGraphicsScene;
    //QGraphicsView   *m_pMainGraphicsView;
    QGLWidget       *m_pMainGLWidget;

    CEasyGraphicsItem *m_pItem;

    CEasyGLWidget *m_OGLItem;
};


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。