我的目的是使用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