2013-06-10 21 views
7

Es gibt etwas, das ich über Qt Designer nicht verstehe. Ich arbeite seit einiger Zeit damit, und trotzdem beende ich die .ui-Dateien immer noch manuell.Qt Designer kann QMainWindow nicht fördern

Wie es in jedes einzelne Tutorial auf Qt zu sehen ist, eine der allererste, was Sie tun, wenn Sie eine GUI erstellen ist QMainWindow Unterklasse - um die closeEvent() Funktion, zum Beispiel zu fangen und neu zu definieren.

Es ist jedoch nicht möglich, in Qt Designer Unterklasse ("promote") QMainWindow - Sie können es mit vielen anderen Klasse, aber nicht diese.

Was ich in der Regel tun, ist die .ui Datei und Änderung bearbeiten:

<class>MainWindow</class> 
    <widget class="QMainWindow" name="MainWindow"> 

von:

< widget class="MyMainWindow" name="MainWindow"> 

So, dass mein Code QMainWindow richtig in meinem Code Unterklasse kann:

class MyMainWindow(QMainWindow, object): 
    ''' I can redefine closeEvent here! ''' 

Offensichtlich ist das komisch - und ich vermisse wahrscheinlich etwas über den richtigen Weg mit Designer. Aber ich kann keine Erklärung finden.

Warum ist es nicht möglich, in Designer QMainWindow Unterklasse, oder wie Sie meine Anwendung anders strukturieren, um die Notwendigkeit zu vermeiden?

Dank

Antwort

4

Sie müssen in der Regel nicht das Wurzelelement des UI-Tree zu fördern. Wenn Sie Ihre Klasse mithilfe der UI-Datei ordnungsgemäß initialisieren, können Sie closeEvent ohne sie neu definieren. This answer zeigt, wie es richtig gemacht wird.

+0

Danke für das Zeigen auf diese Antwort. Aber das zeigt, dass jemand das gleiche Problem hatte und einen Hack kreierte, um damit umzugehen. Jetzt ist es mir nicht so klar, ob es sich um einen Seitenfehler handelt. Wenn Sie Qt/C++ oder PyQt verwenden, wird beim Aufruf von load() innerhalb einer Instanz der obersten Klasse der UI-Datei das geladene Widget direkt der aktuellen Instanz zugeordnet. Dies wird in der QUiLoader Dokumentation auf keinen Fall so erklärt. Immer noch verwirrt. –

2

Ich weiß, das ist alt. Ich bin irgendwie auf dasselbe Problem gestoßen. Ich möchte Docking-Funktionen in einem Unterfenster verwenden. Als ich versuchte, das QMinWindow zu promoten, sehe ich es nicht in der Liste. Dann habe ich versucht, QWidget in der Dropdown-Liste zu verwenden, es ging magisch durch.

Nur meine Erfahrung.

Verwandte Themen