2016-06-29 2 views
2

Ich teste ein Projekt, das ich heruntergeladen habe, das kein "mainwindow.ui" hat, aber das Hauptfenster wird programmgesteuert QWindow erben stattdessen erstellt.Passen Qt-Fensterformular zu QWindow vor

OpenGLWindow::OpenGLWindow(QScreen* screen): QWindow(screen) 

Es funktioniert einwandfrei, aber natürlich in diesem Fenster neue Elemente hinzuzufügen, ist nicht so schnell, wie es die Qt Designer verwenden würde. Daher habe ich mich gefragt, ob es nach dem Erstellen eines neuen Formulars mit dem Qt Designer einen Weg gibt, das neue Fenster zu diesem existierenden OpenGLWindow zu promoten, damit ich seinen Inhalt in "newwindow.ui" sehen kann. Ich hoffe das macht Sinn.

Antwort

0

Ich bin mir nicht ganz sicher, aber diese allgemeine Idee sollte funktionieren, vorausgesetzt, die Fensterklasse Sie NewWindow benannt erstellt:

class OpenGLWindow : public QWindow { 
    Ui::NewWindow *ui; // Add this variable 
    /* rest of class */ 
} 

#include <ui_newwindow.h> 
OpenGLWindow::OpenGLWindow(QScreen* screen): QWindow(screen), ui(new Ui::NewWindow) { 
    ui->setupUi(this); 
    /* rest of constructor */ 
} 

Und dann vergessen Sie nicht ui im Destruktor zu löschen.

+0

Vielen Dank für Ihren Vorschlag! Leider habe ich einen Fehler beim Kompilieren von 'ui-> setupUi (this) 'im OpenGLWindow Konstruktor. Um genau zu sein ist es: ** keine passende Funktion für den Aufruf von 'Ui :: NewWindow :: setupUi (OpenGLWindow *)' ui-> setupUi (this); **. Weißt du, wie man es repariert? – Izzy88

+0

Whoops! Es tut uns leid. Es scheint, dass nur QWidgets die Qt Designer-Formulare unterstützen ([Dokumentation hier] (http://doc.qt.io/qt-5/qwindow.html#details)). Vielleicht könnten Sie die Vererbung von QWindow zu QMainWindow ändern? Entschuldigung, das scheint keine super einfache Lösung zu sein:/ – meepzh

+0

Kein Problem, das Problem ist, dass fast alle Methoden in OpenGLWindow, die eine ziemlich lange und komplexe Klasse ist, nur funktionieren, wenn Sie von QWindow erben. Trotzdem danke! – Izzy88