Sự khác biệt giữa QMainWindow, QWidget và QDialog là gì?


Câu trả lời:


130

A QWidgetlà lớp cơ sở cho tất cả các lớp có thể vẽ được trong Qt. Bất kỳ QWidgetlớp dựa trên cơ sở nào cũng có thể được hiển thị dưới dạng cửa sổ bằng cách hiển thị nó khi nó không có cha.

A QDialogdựa trênQWidget , nhưng được thiết kế để hiển thị dưới dạng cửa sổ. Nó sẽ luôn xuất hiện trong một cửa sổ và có các chức năng để làm cho nó hoạt động tốt với các nút thông thường trên hộp thoại (chấp nhận, từ chối, v.v.).

QMainWindowđược thiết kế xung quanh các nhu cầu thông thường đối với một cửa sổ chính. Nó có các vị trí được xác định trước cho thanh menu, thanh trạng thái, thanh công cụ và các widget khác. Nó không có bất kỳ phụ cấp tích hợp nào cho các nút tương tự QDialog.


1
Tôi đã tìm kiếm câu hỏi này nhưng đó không thực sự là câu trả lời mà tôi đang chờ đợi. Trong QtDesigner, sử dụng QMainWindow cung cấp cho bạn thanh menu và thanh trạng thái. Khi bạn tự viết mã và sử dụng QMainWindow, bạn không có những thứ này. Hoặc câu nói của bạn rằng bạn có thể làm điều gì đó như window.addToolBar ("Thanh công cụ"); và nó sẽ đặt nó tại một nơi được xác định trước mà không có bất kỳ đau đầu nào khác?
Lilian A. Moraru

1
@MoraruLilian: Tôi không thực sự sử dụng QMainWindow, vì vậy tôi không biết cụ thể. Như tôi đã nói trong câu trả lời của mình, tôi biết nó có chỗ cho chúng, vì vậy việc thực hiện nó trong mã có thể đơn giản như bạn nêu.
Caleb Huitt - cjhuitt

8
@Caleb_Huitt Nó thực hiện những gì tôi đang nói. Tôi chỉ muốn làm rõ nếu đó là những gì bạn đang cố gắng nói. Dù sao, tôi khuyên bạn nên luôn sử dụng QWidget thay vì QMainWindow. Bạn có thể gặp sự cố, chẳng hạn như khi thiết lập một Bố cục khác. Nếu bạn muốn đặt một bố cục mới trong QMainWindow, bạn sẽ phải tạo một QWidget và đặt nó làm tiện ích trung tâm cho QMainWin và ngay sau đó trong QWidget, bạn có thể setLayout (QLayout *). Trong khi bạn có thể tránh thêm những cơn đau đầu chỉ bằng cách sử dụng QWidget. Chắc chắn, QMainWindow Mời dễ dàng thiết lập các thanh công cụ và Statusbar nhưng bạn có thể làm điều đó cho mình trong QWidget ...
Lilian A. Moraru

2
Một lý do chúng tôi đang tìm kiếm để sử dụng QMainWindowthay vì chỉ các lớp cơ sở QWidgetQMainWindowQDockWidgetsự ủng hộ trong khi QWidgetmột mình không
ComradeJoecool

2
@ mLstudent33 Đó nghe có vẻ là một câu hỏi hay cho tài liệu, và nếu điều đó không giúp ích được gì, hãy hỏi ở đây như một câu hỏi chính chứ không phải trong các nhận xét. Bạn có thể xem một ví dụ (cho Qt5) tại doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt Ngày

4

QWidget : là một lớp cơ sở cho tất cả các phần tử GUI khác trong mô-đun QtWidgets. Nó có thể tự tạo thành một cửa sổ hoặc là một phần của QLayout, hoặc chỉ là một thành viên của hệ thống phân cấp cha-con.

QDialog : thường được sử dụng để - ngạc nhiên! - hiển thị hộp thoại tạm thời khi người dùng yêu cầu nhập.

QMainWindow : là một lớp tiện lợi có thể được sử dụng làm cửa sổ chính của ứng dụng của bạn. Nó có một số tính năng hay được tích hợp sẵn: thanh trạng thái, thanh công cụ và thanh menu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.