QtOpenGL滚动条不适用于Mac OS X 10.9 Mavericks

时间:2014-03-14 00:06:35

标签: macos qt opengl qt4 qt5

我的目的是使用QtOpenGL绘制并使用滚动条在场景中移动。

奇怪的是:它在windows和linux上运行良好,并且在osx上不起作用。我怀疑从源代码构建qt可以解决这个问题。

您可能会获得以下源代码的副本(包含Windows,Linux和Mac OS x的可执行文件)here

的main.cpp

#include <QtGui>
#include <QtOpenGL>
class GraphicsView: public QGraphicsView {
public:
    GraphicsView(QWidget* parent = 0) : QGraphicsView(parent) {}
protected:
    void resizeEvent(QResizeEvent *event) {
        if (scene()) {
            scene()->setSceneRect(QRect(QPoint(0, 0), event->size()));
        }
        QGraphicsView::resizeEvent(event);
    }
};
class GraphicsScene : public QGraphicsScene {
public:
    void drawBackground(QPainter *painter, const QRectF &rect) {
        if (painter->paintEngine()->type() != QPaintEngine::OpenGL && painter->paintEngine()->type() != QPaintEngine::OpenGL2) {
            qWarning("GraphicsScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view");
            return;
        }
        painter->beginNativePainting();
        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glViewport(0, 0, width(), height());
        glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
        glColor3f(0.0, 1.0, 0.0);
        glBegin(GL_POLYGON);
            glVertex3f(0.25, 0.25, 0.0);
            glVertex3f(-0.25, 0.25, 0.0);
            glVertex3f(-0.25, -0.25, 0.0);
            glVertex3f(0.25, -0.25, 0.0);
        glEnd();
        glColor3f(1.0, 0.0, 0.0);
        glBegin(GL_TRIANGLES);
            glVertex3f(0.25, 0.25, 0.0);
            glVertex3f(0.0, 0.5, 0.0);
            glVertex3f(-0.25, 0.25, 0.0);
        glEnd();
        painter->endNativePainting();
    }
};
class WindowViewer: public QMainWindow {
public:
    WindowViewer() : m_area(this), m_view(this), m_widget(), m_canvas() {
        m_view.setScene(&m_canvas);
        m_view.setViewport(&m_widget);
        m_view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
        m_view.resize(1000, 1000);
        m_area.setWidget(&m_view);
        setCentralWidget(&m_area);
        setWindowTitle("WindowViewer");
        show();
        raise();
    }
    virtual ~WindowViewer(){}
private:
    QScrollArea m_area;
    GraphicsView m_view;
    QGLWidget m_widget;
    GraphicsScene m_canvas;
};
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    WindowViewer w;
    w.resize(800, 600);
    return app.exec();
}

main.pro

TEMPLATE = app
TARGET = main
SOURCES += main.cpp
QT += opengl

我已经在以下设置上构建了它。但是许多其他设置也可能就足够了。

OS X 10.9 Mavericks

Qt version 4.8.5, QMake version 2.01a
gcc version 4.8.2

Ubuntu 12.04

Using Qt version 4.8.1, QMake version 2.01a
gcc version 4.8.1

Windows 7

Qt version 4.8.5, QMake version 2.01a
gcc version 4.8.1

0 个答案:

没有答案
相关问题