Jaka jest różnica między QMainWindow, QWidget i QDialog?

123

Jaka jest różnica między QMainWindow, QWidget i QDialog?

zibib
źródło

Odpowiedzi:

130

A QWidgetjest klasą bazową dla wszystkich klas rysowalnych w Qt. Dowolną QWidgetklasę bazującą można wyświetlić jako okno, pokazując ją, gdy nie ma rodzica.

QDialogOpiera się na QWidget, ale przeznaczone do pokazany jako okno. Zawsze pojawi się w oknie i ma funkcje, które sprawiają, że dobrze współpracuje z typowymi przyciskami w oknach dialogowych (zaakceptuj, odrzuć itp.)

QMainWindowjest zaprojektowany wokół typowych potrzeb, jakie musi mieć okno główne. Ma predefiniowane miejsca na pasek menu, pasek stanu, pasek narzędzi i inne widżety. Nie ma żadnych wbudowanych limitów dla przycisków, takich jak QDialogma.

Caleb Huitt - cjhuitt
źródło
1
Szukałem tego pytania, ale tak naprawdę nie jest to odpowiedź, na którą czekałem. W QtDesigner za pomocą QMainWindow udostępnia pasek menu i pasek stanu. Kiedy sam piszesz kod i używasz QMainWindow, nie masz takich rzeczy. Albo twoje powiedzenie, że możesz zrobić coś takiego jak window.addToolBar ("Toolbar"); i umieści go we wcześniej określonym miejscu bez żadnego innego bólu głowy?
Lilian A. Moraru
1
@MoraruLilian: Właściwie nie używam QMainWindow, więc nie znam szczegółów. Jak powiedziałem w mojej odpowiedzi, wiem, że ma dla nich miejsce, więc zrobienie tego w kodzie może być tak proste, jak twierdzisz.
Caleb Huitt - cjhuitt,
8
@Caleb_Huitt Robi to, co mówię. Chciałem tylko wyjaśnić, czy to właśnie próbujesz powiedzieć. W każdym razie zalecałbym zawsze używanie QWidget zamiast QMainWindow. Możesz mieć problemy, na przykład z ustawieniem innego układu. Jeśli chcesz ustawić nowy układ w QMainWindow, musisz utworzyć QWidget i ustawić go jako centralny widget dla QMainWin, a następnie w QWidget możesz ustawićLayout (QLayout *). Chociaż możesz uniknąć dodatkowych bólów głowy, używając samego QWidget. Jasne, QMainWindow oferuje tak łatwą konfigurację ToolBar i StatusBar, ale możesz to zrobić sam w QWidget ...
Lilian A. Moraru
2
Jednym z powodów, dla których chcemy użyć QMainWindowzamiast tylko klasy bazowej, QWidgetjest to, że QMainWindowma QDockWidgetwsparcie, podczas gdy QWidgetsam nie
Towarzysz Joecool
2
@ mLstudent33 To brzmi jak dobre pytanie do dokumentacji, a jeśli to nie pomoże, zadaj tutaj pytanie jako podstawowe, a nie w komentarzach. Jeden przykład (dla Qt5) można zobaczyć pod adresem doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt
4

QWidget : jest klasą bazową dla wszystkich innych elementów GUI w module QtWidgets. Może stanowić samo okno, być częścią QLayout lub tylko członkiem hierarchii nadrzędny-podrzędny.

QDialog : jest zwykle używany do - niespodzianka! - wyświetla tymczasowe okno dialogowe, gdy wymagane jest wprowadzenie danych przez użytkownika.

QMainWindow : to wygodna klasa, której można używać jako głównego okna aplikacji. Ma wbudowane kilka fajnych funkcji: pasek stanu, paski narzędzi i pasek menu

Lalit kumar
źródło