文章目录
一、QMainWindow
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
1.菜单栏
菜单栏一般只创建一个,在一个窗口中。
1.1 创建菜单栏
(1)创建了一个菜单栏,这是一个对象,窗口也是一个对象。要将菜单栏放到窗口中,就是要将两个对象联系起来。以后也要注意,当创建了一个对象,记得要与其他的对象联系起来。
(2)代码:
// 1.菜单栏
QMenuBar * bar = menuBar();
// 将菜单栏放到窗口中
setMenuBar(bar);
1.2 往菜单栏添加菜单
(1)使用 addMenu() 方法,在菜单栏添加菜单,返回值是一个 QMenu 的指针。
// 1.1 在菜单栏上增加菜单
QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");
(2)效果:
1.3 往某个菜单添加菜单动作
平时,我们在使用 Word 等编辑软件的时候,我们点击菜单栏里面的 “文件” 这个菜单,就会显示菜单里面的菜单项,也就是我们可以做什么。那么现在就来往菜单里面添加菜单动作。
(1)使用 addAction() 函数添加菜单项。返回值是 QAction 的一个指针,当不知道返回值是什么类型,就把鼠标放在 addAction() 上,就会显示。
// 1.2 在菜单上添加菜单动作,也就是某个菜单里面也可以有哪些操作
QAction * newAction = fileMenu->addAction("新建");
QAction * openAction = fileMenu->addAction("打开");
(2)效果:
1.4 在菜单项间增加分割线
使用的是 addSeparator();
(1)代码:在新建和编辑中添加分割线,就在两个菜单项中写上添加分割线代码:
QAction * newAction = fileMenu->addAction("新建");
// 添加分割线
fileMenu->addSeparator();
QAction * openAction = fileMenu->addAction("打开");
1.5 菜单栏数量问题
一般情况,一个窗口只有一个菜单栏,来看看代码:
如果一个窗口中的某个对象只能有一个,那么一般直接调用系统提供的函数,然后使用 set 添加到窗口中。
2.工具栏
工具栏就类似于下面图片的这些提供给用户使用的工具:
2.1 创建工具栏对象
还是要注意,工具栏是一个对象,窗口是一个对象,要把工具栏放到窗口中,就要将这两个对象联系起来:
// 创建工具栏
QToolBar * toolBar = new QToolBar(this); // 将工具栏对象与窗口联系起来
addToolBar(toolBar); // 将工具栏放到窗口中
2.2 改变工具栏的默认位置
(1)工具栏的位置有在顶部的,也有在左,右两边的,那么怎么改变他们的位置。
工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括:
Qt::LeftToolBarArea 停靠在左侧
Qt::RightToolBarArea 停靠在右侧
Qt::TopToolBarArea 停靠在顶部
Qt::BottomToolBarArea 停靠在底部
Qt::AllToolBarAreas 以上四个位置都可停靠
(2)
// 创建工具栏
QToolBar * toolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolBar);
2.3 设置工具栏运行停靠的位置
(1)使用setAllowedAreas()函数指定停靠区域,其实看单词就知道是什么意思了。下面这个是只允许工具栏停在左或者右侧,放在其他的位置是不行的。
setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea)
(2)效果
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
2.4 设置工具栏浮动
使用 setFloatable() 函数来设置工具栏是否可以浮动。这个是什么意思呢?
(1)当我们设置了工具栏可以浮动,并且已经设置了工具栏可以停靠的位置。如果在移动工具栏时,停靠的位置不对,那么工具栏就会显示为一个小的方框,停在那个位置,而不会展开工具栏。
(2)当设置工具栏不可以浮动,并且工具栏只允许在左侧或者右侧停靠。如果停靠的位置不是最左侧或者最右侧,那么工具栏会自动返回左侧或者右侧,接近哪一侧就返回哪一侧。
// 设置浮动
toolBar->setFloatable(false);
2.5 设置工具栏移动性
这个属性的设置就相当于是一个总开关,如果将工具栏设置为不可移动,那么只能停靠在初始化的位置,也不能浮动。
使用setMoveable()函数设定工具栏的可移动性:
setMoveable(false)//工具条不可移动, 只能停靠在初始化的位置上
2.6 往工具栏添加工具
使用 addAction() 往工具栏中添加工具,现在我们将 “新建” 和 “编辑” 这两个动作添加到工具栏中:
toolBar->addAction(newAction);
toolBar->addAction(openAction);
2.7 工具栏数量问题
在一个窗口中可以有多个工具栏,来看一下代码:
一般来说,如果需要自己使用 new + 构造函数的这种方法来创建的对象,就可以有多个。并且一般来说可以有多个的对象是用 add 方法来添加到窗口中的。
如果一个不够,就再 new 一个,再添加到窗口中。
3. 状态栏
状态栏一般来说就是记录了某个时刻使用该软件的状态。比如说 Word 软件中的状态栏:
3.1 状态栏的数量
一般来说,一个窗口只有一个转态栏。所以创建的时候,是直接调用系统提供的函数。添加到窗口中使用的是 set 的这种方式:
// 状态栏
QStatusBar * staBar = statusBar();
setStatusBar(staBar);