QT designer 中的 main windows 和 widget 和diaglog ,这三种基本UI类型有什么区别?分别在什么场景下使用是最佳实践?

1. Main Window(主窗口)
-
结构特点:
Main Window
是一个具有完整应用程序框架的窗口,它包含菜单栏(Menu Bar
)、工具栏(Tool Bar
)、状态栏(Status Bar
),并且有一个中央部件区域(Central Widget
)用于放置主要的内容,还可以有多个停靠部件(Dock Widget
),可以停靠在主窗口的边缘位置。- 这种结构为复杂的应用程序提供了标准的布局方式,方便用户进行操作和导航。
-
适用场景:
- 大型应用程序:比如办公软件、图形设计软件、集成开发环境(IDE)等。以办公软件为例,菜单栏可以放置文件操作、编辑、视图切换等功能选项,工具栏提供常用功能的快捷按钮,状态栏用于显示当前文档状态、光标位置等信息,中央部件区域则用于显示和编辑文档内容,停靠部件可以用来显示侧边栏,如样式设置、导航目录等。
- 需要频繁进行文件操作和功能切换:因为菜单栏和工具栏能方便地组织和提供大量的功能入口。
2. Widget(部件)
-
结构特点:
Widget
是最基本的 UI 元素,它可以是一个简单的按钮、标签,也可以是一个复杂的自定义容器。没有预定义的菜单栏、工具栏和状态栏等结构,非常灵活,开发者可以自由地在上面添加各种子部件,设计各种布局。- 它可以作为独立的窗口(设置为顶层窗口,即设置
windowFlags
属性),也可以作为其他容器(如Main Window
、Dialog
)中的子部件。
-
适用场景:
- 小型独立功能模块 :比如一个简单的计数器工具、一个自定义的绘图面板等。可以将这些功能集成到一个
Widget
中,方便复用。 - 作为其他容器的子部件 :在
Main Window
的中央部件区域,或者在Dialog
中,可以放置Widget
来实现具体的业务逻辑,比如在对话框中放置一个包含多个输入框和标签的Widget
,用于收集用户信息。
- 小型独立功能模块 :比如一个简单的计数器工具、一个自定义的绘图面板等。可以将这些功能集成到一个
3. Dialog(对话框)
-
结构特点:
Dialog
是一种用于与用户进行交互的临时窗口,它可以有按钮(如确定、取消按钮),用于用户进行选择或输入信息后进行确认操作。它通常没有菜单栏和工具栏,样式上更倾向于简洁的对话式设计。Dialog
分为模态对话框和非模态对话框。模态对话框在显示时会阻塞用户对其他窗口的操作,直到对话框关闭;非模态对话框则不会阻塞,用户可以在对话框显示时继续操作其他窗口。
-
适用场景:
-
信息提示:比如显示警告信息(如文件保存失败提示)、错误信息(如用户名密码错误提示)、提示信息(如软件更新提示)等。
-
用户输入:当需要用户输入一些信息时,如打开文件对话框让用户选择文件路径、保存文件对话框让用户指定文件名和保存路径,或者弹出一个对话框让用户输入用户名和密码进行登录等。
-
总之,在实际开发中,根据应用程序的功能需求和交互方式来选择合适的 UI 类型,通常大型应用以Main Window
作为主框架,内部使用Widget
来实现具体功能,用Dialog
来处理临时性的交互。