5.4 本章小结
5.4 本章小结
5.4.1 QMainWindow
5.4.1.1 QMainWindow介绍
QMainWindow是Qt三大基本窗体部件中的一种(QWidget、QDialog、QMainWindow),而QWidget则是最为基本的窗体部件,它可以被随意的进行添加或在其上设置布局管理器,并且可以在同一个Widget中嵌套使用Widget(只需要清楚其中的父子窗口关系即可)。而QDialog则是一种特殊的用于描述对话框窗体的部件,其中包括了几个基本的对话框按钮以及其他的一些窗体元素,这些窗体元素同样可以相互嵌套或自由布局,另外对话框在实际的UI界面交互中需要知道用户点击了对话框的哪个按钮以及用户在对话框中输入时什么数据。Qt中也提供了一些标准的对话框(QFileDialog、QColorDialog、QFontDialog、QPrintDialog以及常常被使用的几个QInputDialog[这其中包括了数字输入对话框,浮点数输入对话框以及字符串输入对话框])。而对于QMainWindow我们需要知道,QMainWindow是一种描述主窗体的特殊窗体,它包括了几大基本的构成元素(标题栏,菜单栏,工具栏,锚接部件,中心窗体以及状态栏),而QMainWindow从这一点来思考其布局器则可以明确的知道它以及有了布局,不能再为其单独设置布局器,而你想将自定义的窗体放到其中心窗体上,那么这样子来讲的话,只有中心窗体被允许自定义布局器。标题栏往往被用来描述该窗口具体的名字或功能。而菜单栏则是用于容纳多个菜单的特殊容器,并且菜单栏只能有一个。工具栏则是一些由QAction构成的基本动作的组合体,也可以通过QToolBar来管理这些QAction,并将对应的ToolBar添加到主窗体上,工具栏可以有多个,不受数量限制。锚接部件(也可以被理解为放DockWidget的一些部件),这种特殊的部件存在于中心窗体和工具栏之间,它可以是任意继承自QWidget的窗体部件类,并且当自定义好这些部件后,可以通过QDockWidget的setWidget方法设置上,并添加到QMainWindow中。这种窗体类似于Visual Studio中的项目属性的那种可以停靠在主窗体任意位置的窗体。这种窗体可以有多个。中心窗体则是用来容纳主窗体中的最主要窗体的重要部件,这种部件允许被任意的布局,并且中心窗体承担着向用户展示当前窗口中最主要的窗口的部件。只能有一个中心部件。状态栏则是用于显示用户执行一步操作之后的结果的一种特殊的窗体部件,这种部件也只被运行只有一个。它位于整个MainWindow的最底部。
5.4.1.2 QMainWindow的常用方法
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget);//向主窗体中添加一个DockWidget(实际上可以理解为就是锚接部件),并且可以规定DockWidget的可停靠的区域 void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)//同上,但是可以规定插入的DockWidget的方向(水平或垂直) void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)//添加一个工具栏,并可以规定工具栏可停靠的位置 void addToolBar(QToolBar *toolbar)//添加工具栏,然后默认可以在窗口任意位置停靠工具栏 QToolBar *addToolBar(const QString &title)//添加工具栏,并返回工具栏的指针,可以通过这个指针来往里面添加或设置QAction void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)//添加一个工具栏和工具栏之间的分隔符(一般情况下就是换行一个工具栏) QWidget *centralWidget() const//返回中心窗体的Widget指针 Qt::DockWidgetArea corner(Qt::Corner corner) const//返回占据指定角落的停靠小部件的区域(这个角落可以有四种:) Qt::TopLeftCorner 整个矩形的左上角 Qt::TopRightCorner 整个矩形的右上角 Qt::BottomLeftCorner 整个矩形的左下角 Qt::BottomRightCorner 整个矩形的右下角 virtual QMenu *createPopupMenu()//创建弹出式菜单(这个创建的弹出式菜单要求你的主窗口上需要有工具栏或停靠小窗口部件,否则就会返回nullptr(创建不成功),这种弹出式菜单往往被用在点击了工具栏的某个按钮后,弹出一个多个选项的菜单栏 QMainWindow::DockOptions dockOptions() const//这个函数用于返回当前MainWindow的停靠行为 Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const//该函数则是通过传入的DockWidget(这个DockWidget需要被添加到MainWindow中才行哈)来返回其在主窗口中停靠的位置 bool documentMode() const //是否为文档模式(默认为false) QSize iconSize() const//返回当前主窗口中的ToolBar的图标的尺寸大小 void insertToolBar(QToolBar *before, QToolBar *toolbar)//插入工具栏(可以规定你想插入到哪个工具栏之前) void insertToolBarBreak(QToolBar *before)//在before工具栏前插入一个工具栏的分隔符 bool isAnimated() const//该属性用于表示当DockWidget或工具栏被拖动时是否会有动画效果[默认是true](可以通过setAnimated方法进行设置) bool isDockNestingEnabled() const//当前停靠小部件是否可以被嵌套停靠(默认情况下,我们的DockWidget是只能在水平或垂直方向进行停靠的,但对于一些需要大量用到DockWidget的App中则可能需要使用嵌套停靠的方式) QMenuBar *menuBar() const//返回当前主窗口的菜单栏(这是一个很重要且常用的方法,我们就是通过这个方法来在菜单栏中添加菜单的) QWidget *menuWidget() const//返回菜单栏的窗口指针(若未构造菜单栏,则会返回nullptr) void removeDockWidget(QDockWidget *dockwidget)//移除主窗口中的某个DockWidget void removeToolBar(QToolBar *toolbar)//移除主窗口中的某个工具栏 void removeToolBarBreak(QToolBar *before)//移除主窗口中某个工具栏前面的那个工具栏分隔符 void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)//对DockWidget进行调整大小的操作(使用了List和List进行描述),他使用了List的DockWidget和List的size进行描述,并指定了你的这个size究竟是调整的是长度还是宽度 bool restoreDockWidget(QDockWidget *dockwidget)//如果DockWidget是在调用restoreState之后创建的,则恢复到其原来的状态并返回true,否则返回false bool restoreState(const QByteArray &state, int version = 0)//恢复此主窗口的工具栏或DockWidget的状态到version状态下,若恢复成功,该函数返回true,否则false QByteArray saveState(int version = 0) const//保存当前主窗口中的每个工具栏和DockWidget的当前状态(可以理解为目前主窗口中这些小部件的位置和一些其他的状态信息),并且可以通过QSettings写入到配置文件中(这个步骤往往被应用在重写closeEvent事件中,对当前的窗口状态进行一个保存操作) void setCentralWidget(QWidget *widget)//设置主窗口的中心窗体 void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)//为DockWidget设置在某个角落中可以停靠的位置 void setDockOptions(QMainWindow::DockOptions options)//设置MainWindow中DockWidget的停靠行为 void setDocumentMode(bool enabled)//设置是否为文档模式 void setIconSize(const QSize &iconSize)//设置MainWindow中的工具栏的图标的大小 void setMenuBar(QMenuBar *menuBar)//为当前的MainWindow重新设置菜单栏 void setMenuWidget(QWidget *menuBar)//为当前的MainWindow重新设置菜单栏 void setStatusBar(QStatusBar *statusbar)//设置状态栏 void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)//给指定的小部件位置的区域的小部件选项卡设置选项卡的位置 void setTabShape(QTabWidget::TabShape tabShape)//设置选项卡的形状(这类似于文本编辑器里面的那种TabWidget) void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)//设置工具按钮的样式 void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)//分割两个DockWidget(水平或垂直) QStatusBar *statusBar() const//返回状态栏的指针 QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const//通过小部件的位置来返回小部件对应的选项卡的位置 QTabWidget::TabShape tabShape() const//返回选项卡的样式 QList<QDockWidget *> tabifiedDockWidgets(QDockWidget *dockwidget) const//返回与DockWidget一起标记的Dock小部件 void tabifyDockWidget(QDockWidget *first, QDockWidget *second)//将第二个停靠小部件移动到第一个停靠小部件的顶部,在主窗口中创建一个选项卡式停靠区域 QWidget *takeCentralWidget()//移除掉当前主窗口中的中心窗体(并返回指针) Qt::ToolBarArea toolBarArea(QToolBar *toolbar) const//传入位于当前主窗口中的某个工具栏的指针来返回其位于主窗口中的位置 bool toolBarBreak(QToolBar *toolbar) const//返回指定的工具栏的前面是否有工具栏分隔符 Qt::ToolButtonStyle toolButtonStyle() const//返回工具按钮的样式 bool unifiedTitleAndToolBarOnMac() const//此属性用于返回当前主窗口是否使用的是MacOS上的统一的标题和工具栏外观(可以通过setUnifiedTitleAndToolBarOnMac(bool)来设置)

浙公网安备 33010602011771号