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
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. –