2013-06-10 18 views
7

Jest coś, czego nie rozumiem o Qt Designer. Pracuję z nim od jakiegoś czasu i nadal zawsze ręcznie edytuję pliki .ui.Qt Designer nie może promować QMainWindow

Jak można zauważyć w każdy samouczek na Qt, jeden z pierwszą rzeczą zrobić podczas tworzenia GUI jest do podklasy QMainWindow - aby złapać i przedefiniować funkcję closeEvent(), na przykład.

Nie można jednak podklasy ("promować") QMainWindow w Qt Designer - można to zrobić z wieloma innymi klasami, ale nie z tą.

Co zwykle zrobić to edytować plik .ui i zmienić:

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

według:

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

więc, że mój kod może podklasy QMainWindow właściwie w moim kodu:

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

Oczywiście, jest to dziwne - i prawdopodobnie brakuje mi czegoś o tym, jak to zrobić z Projektantem. Ale nie mogę znaleźć żadnego wyjaśnienia.

Dlaczego nie jest możliwe podklasy QMainWindow w Projektancie, lub jak inaczej ustrukturyzować aplikację, aby uniknąć potrzeby?

Dzięki

Odpowiedz

4

Zazwyczaj nie trzeba promować element główny drzewa UI. Jeśli poprawnie zainicjujesz klasę przy użyciu pliku UI, możesz bez niej ponownie zdefiniować closeEvent. This answer pokazuje, jak zrobić to poprawnie.

+0

Dzięki za wskazanie tej odpowiedzi. Ale to pokazuje, że ktoś miał ten sam problem i stworzył hack do obejścia go. Teraz nie jest dla mnie jasne, czy jest to bug Pyside. Podczas używania Qt/C++ lub PyQt wywoływanie load() z poziomu instancji klasy najwyższego poziomu Ui bezpośrednio mapuje załadowany widżet do bieżącego wystąpienia? Z pewnością nie jest to wyjaśnione w dokumentacji QUiLoader. Wciąż zdziwiony. –

2

Wiem, że to jest stare. Jakoś wpadłem na ten sam problem. Chcę korzystać z funkcji dokowania w oknie podrzędnym. Kiedy próbowałem promować QMinWindow, nie widzę go na liście. Potem próbowałem używać QWidget na rozwijanej liście, to magicznie przeszło.

Po prostu moje doświadczenie.

Powiązane problemy