本文以QTcreator为例,代码为c++
1.所有窗口
QWidget:所有部件的基类,可以作为通用的容器。
QMainWindow:主窗口,支持菜单栏、工具栏、状态栏等。
QDialog:对话框,通常用于模态交互。
QFrame:框架控件,用于划分界面或作为容器。
2.窗口详情
接下来我们详细分类说明每个窗口的作用和运用场景.
1.QWidget
构造函数:
QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
parent
:父窗口部件。如果为nullptr
,表示是顶级窗口。f
:窗口标志,用于设置窗口特性(如无边框、置顶等)。
QWidget是所有部件的基类,几乎所有的控件和窗口都是直接或间接从QWidget 派生的。QWidget 本身可以作为一个通用的容器,也可以单独使用来显示内容.
1.它可以作为顶级窗口或子窗口。
QWidget可以作为单独页面,也可以作为主页面为主父类.也可以作为子窗口,以其他窗口为父类.运用场景很大,几乎你能想到的界面都可以由他作为底窗口.
2.可作为其他部件使用
因为它是所有部件的基类,所以我们可以将它认为母体,它可以衍生出我们想用到的部件,比如按钮,表格,标签等.在某些特定场景,可能是布局需要,或者是样式需要,无法直接使用按钮pushbutton,表格table~等,就可以利用widget的特性,直接将其修改成按钮或者其他部件属性.因此,它也具有槽函数等功能,可以直接建立.
3.可以自定义绘图
提供了 paintEvent()
,允许开发者使用 QPainter 自定义绘图.我们可以利用此函数对widget的样式进行修改,在我们的基础界面中,widget是默认长方形的.我们可以修改其四边长度以及边角等.
2.QMainWindow
构造函数:
QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
parent
:指定父窗口,如果为空则为顶层窗口。flags
:窗口标志,例如无边框、工具窗口等。
QMainWindow
是 Qt 框架中提供的一个主窗口类,它专门用于构建具有标准窗口布局的应用程序界面。相比于 QWidget
,QMainWindow
提供了更多特定的功能,例如菜单栏、工具栏、状态栏、停靠窗口等。
1.标准主窗口布局
QMainWindow就相当于整个程序的主要工作页面,比如说wps的工作页面.
2.支持停靠功能
在mainwindow中,我们创建的其他部件或者特定窗口,是可以停靠在mainwindow上的,它支持同时出现多种窗口的情况,并且,这些停靠的窗口可以由我们自定义移动浮动等动作.
3.有清晰的布局
正如我们刚创建的这样,在它的界面有清晰明确的布局,我们可以直接利用其布局开始设计.
在这里我列举一下其主要栏的代码
setCentralWidget(QWidget *) //设置中央窗口
menuBar() //菜单栏
addToolBar(const QString &) //添加工具栏
statusBar() //状态栏
addDockWidget(Qt::DockWidgetArea, QDockWidget *) //添加停靠窗口
3. QDialog
QDialog是 Qt 框架中用于构建对话框的类,对话框是一种临时窗口,用于显示信息或与用户交互。
构造函数:
QDialog(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
parent
:指定父窗口,如果为空则为顶层窗口。flags
:窗口标志,例如无边框、工具窗口等。
1.模态支持
可以理解为阻塞,
setModal(true)
当为true的时候,即为阻塞.阻塞之后,出现dialog窗口时,其他窗口无法交互,只能能dialog窗口关闭才能继续交互.相反,如果为非模态,则出现dialog后,其他界面依旧可以交互.
这种情况可用于确认窗口,当用户做出某个选项之后,可以弹出确认窗口进行确认-取消.只有点击这两个之后才能继续回到主页面进行下一步.如何回到主页面?
2.返回
QDialog提供了exec()方法进行返回操作,用来运行对话框并且返回结果操作.
3.灵活小巧
QDialog可以作用于任何界面,用于临时性的对话或者交互窗口,不会影响主窗口布局.且所占用内存小.
4.QFrame
QFrame是用于创建带边框的窗口或组件,也可以作为容器,它作为容器多数是用于布局管理和样式设计等,因为它具有可设计性.
构造函数:
QFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
parent
:父控件,指定该QFrame
所属的父窗口或控件。f
:窗口标志,用于设置窗口类型(如工具窗口、弹出窗口等)。
1.样式
可以设置边框样式(如凹陷、凸起、平面等)。
边框的宽度、形状和颜色都可以自定义。
对于这部分内容,后面我们可以在学习Qss样式表的时候详细学习.
2.容器
可以作为容器控件,承载其他控件.
可以用于分隔界面区域或装饰界面。
3.继承
是许多其他控件的基础类(如 QLabel
、QGroupBox
等)。
3.总结
综上,我给出我个人的一个小总结.对于一个单页面项目,我们可以直接创建mianwindow界面,在mainwindow界面进行其他操作.对于多界面项目,我们可以创建多个界面,以widget和mianwindow为主,mainwindow为主界面,widget为登录或者其他衍生界面.在这两个界面中我们插入多个frame作为容器进行界面样式设计,运用dialog进行确认或者交互窗口.