2009-10-29 19 views
9

Quali sono esattamente le mie opzioni? Ho programmi che ho bisogno di scrivere in OpenGL e DirectX, e mi piacerebbe usare Qt per OpenGL, e non dover reimplementare metà del mio programma per i componenti DirectX del mio compito.Utilizzo di Qt con DirectX?

Ho guardato su Google e ho trovato i riferimenti a persone che si lamentano Direct3D essere una dipendenza di Qt, e la gente parlando di attuazione QD3DWidget sub-classing QWidget in un modo simile a QGLWidget, eppure nessuno parlato di come implementare esso o dove sono alcuni esempi.

Ho bisogno di aiuto. Voglio sapere se è possibile? Cosa avrei bisogno di fare per farlo funzionare? È già stato fatto prima?

risposta

15

sua abbastanza semplice di quanto pensassi,

-> Create a QWidget 
-> Override paintEngine() method, does nothing, just returns NULL 
-> Assign HWND to widget->winId() 

    #ifdef USE_QTGUI 
     QApplication a(argc, argv); 
     CD3DWidget wndw; wndw.show(); wndw.resize(1280,960); 
     hWnd = wndw.winId(); 
    #else 
     hWnd = CreateAppWindow(name,300,300); 
    #endif 

     //CD3DWidget class contains only the following definitions 
    CD3DWidget::CD3DWidget(QWidget * parent):QWidget(parent){  } 
    QPaintEngine *CD3DWidget::paintEngine(){   return NULL;  } 

Grazie,

CV

+0

Questo funziona nell'ultimo QT? Entrambe le altre risposte dicono che il supporto per DirectX era sperimentale ed è stato rimosso –

+0

Ciao Tom, l'ho provato e funziona perfettamente. Sono stato in grado di eseguire un QWidget DirectX e un QWidget OpenGL nella stessa QMainWindow. – blueskin

+0

@ Tom J Nowell: Non è necessario alcun supporto o integrazione nel toolkit per utilizzare Direct3D da solo, tutto ciò che serve è un handle nativo della finestra e viene indicato il toolkit per evitare di cancellare quella finestra. Il "supporto rimosso sperimentale" è, per quanto ho capito, un backend di rendering accelerato per Qt, che è una cosa completamente diversa. –

2

Elenco delle modifiche:

Qt 4.6 introduce molte nuove funzionalità e miglioramenti, nonché bugfix rispetto alla serie 4.5.x.

......................

  • Il motore sperimentale vernice Direct3D è stato rimosso. Il motivo per è che Nokia si concentra su OpenGL per il rendering di desktop accelerato .

......................