2016-05-06 8 views
1

Einfach gesagt, ich kann nicht für das Leben von mir herauszufinden, wie man tatsächlich Dinge wie QOpenGLWidget oder QOpenGLWindow oder irgendetwas verwenden. Ich möchte das Rendering Ich bin ein Kind Widget eines Fensters in einem MDI, aber nichts funktioniert.Wie verwende ich OpenGL in Qt 5?

Hier ist der Code, den ich zur Zeit für das Widget eingerichtet haben (zumindest nur die Teile beteiligt OpenGL):

Viewport::Viewport(QWidget * parent) : QOpenGLWidget(parent) { } 

void Viewport::initializeGL() { 
    initializeOpenGLFunctions(); 
} 

void Viewport::paintGL() { 
    // first, clear the screen 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT); 
} 

Und hier ist, wie ich das Widget verwenden:

vp = new Viewport; 
vp->resize(QSize(320,240)); 
hbox->addWidget(vp); 

Und die Ergebnis ist, dass ich nichts sehe. Ich sehe nur einen winzigen Streifen leeren Platz neben dem anderen Widget im Fenster, aber das ist es. Kein schwarzer Bildschirm wie ich versuche, zu löschen, nicht einmal eine leere Fläche von 320x240.

Wie ich schon sagte, ich war nicht in der Lage, dies auf irgendeine Weise zu tun, die ich finden konnte, und es ist wirklich frustrierend. Fehle ich etwas Offensichtliches? Es gibt sehr wenig Dokumentation, so wie es ist, also ist es schwer zu sagen, ob ich es bin oder ob es einen seltsamen Fall gibt, in den ich hineingerate. (Zum Beispiel verwendet keine der von mir gefundenen Dokumentationen QOpenGLWidget als Teil eines größeren Widgets; das ist, weil es nicht sein kann, oder weil alle Beispiele, die ich finden kann, nur faul sind, das Widget als eigenes Top- zu verwenden- Level-Fenster?)

Antwort

1

Nach etwas mehr herumfummeln, stellt sich heraus, mein Problem wurde offensichtlich durch das andere Objekt im Fenster (a QListView) standardmäßig so viel Platz wie möglich, damit das OpenGL-Widget verschwinden seitdem verursacht hat keine Mindestgröße.

Mit anderen Worten, wird das Problem durch entweder die QListView haben eine QSizePolicy::Preferred Sizing Politik (seit Ändern der Größe des Fensters wird nun können Sie sehen, die OpenGL-Widget) der OpenGL-Widget, indem eine minimale oder feste Größe oder das Ändern fixiert.

(Nebenbei, ich wünschte wirklich, dies deutlicher gewesen sein könnte, als auf sie zufällig gerade stolpern.)

+0

it :) –

+0

nächstes Mal offensichtlich sein wird, ich weiß, das ist ziemlich alt, aber FWIW, Sie können Probleme wie diese vermeiden, wenn Sie die Widgets im Designer platzieren, anstatt sie im laufenden Betrieb zu erstellen, damit Sie sehen können, was Sie tun. Der Weg, um dies mit benutzerdefinierten Widgets (wie 'QOpenGLWidget'-abgeleitete, die von' QWidget' abgeleitet sind) zu tun ist, einen Platzhalter 'QWidget' in Ihrem Designer wie gewohnt zu platzieren, dann mit der rechten Maustaste darauf klicken und" Befördert zu...". Dann legen Sie es dort auf Ihre neue benutzerdefinierte Widget-Klasse, und es wird alles magisch funktionieren. Schauen Sie sich http://doc.qt.io/qt-5/designer-using-custom-widgets.html an. –