QMainWindow
QMainWindow
是一个为用户提供主窗口程序的类,继承于QWidget
,包含一个菜单栏栏menu bar
、多个工具栏tool bars
、多个铆接部件dock widgets
、一个状态栏status bar
、一个中心部件central widget
,是许多应用程序的基础,如文本编辑器,图片编辑器等
![](https://i-blog.csdnimg.cn/blog_migrate/56fb2b03eab2d642dc0f086891cec972.png)
其中铆接部件,就是导航栏这种,可以移动又可以贴回去
![](https://i-blog.csdnimg.cn/blog_migrate/dc8d7e1e61b841fe7e93eeb202026fcf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/16786e016a78c8eac843a473b8c4222f.png)
菜单栏
//菜单栏 一般只有一个
QMenuBar *menu = menuBar();
//依赖到窗口上
setMenuBar(menu);
//设置菜单
QMenu *fileMenu = menu->addMenu("文件(F)");
QMenu *editMenu = menu->addMenu("编辑(E)");
//给文件添加菜单项
QAction * newFile = fileMenu->addAction("新建");
//newFile 和 openFile之间添加一个分割线
fileMenu->addSeparator();
QAction * openFile = fileMenu->addAction("打开");
- 菜单栏只能有一个
menuBar()
返回类型是QMenuBar *
,所以定义一个* menu
多看文档
![](https://i-blog.csdnimg.cn/blog_migrate/d46da88f73af59ee42cb8aabaeefb6de.png)
-
创建的菜单栏
menu
,依赖在QMainWindow
上,可以setMenuBar(menu)
-
设置菜单,设置菜单项,菜单项之间设置分割线等等
工具栏
多看文档
// 工具栏 可以有多个
QToolBar * toolBar = new QToolBar(this);
// 将工具栏依赖到窗口上
addToolBar(Qt::LeftToolBarArea,toolBar); // 第一个参数 默认在左边 enum枚举类型
// 只允许将工具栏放在xx
toolBar->setAllowedAreas(Qt::TopToolBarArea|Qt::LeftToolBarArea);
// 设置浮动
toolBar->setFloatable(false);
// 设置移动 总开关
toolBar->setMovable(false);
// 工具栏添加小控件
QPushButton *btn = new QPushButton("按钮",this);
toolBar->addWidget(btn); // addwidget 是因为 QPushButton的父类就是QWidget
connect(btn,&QPushButton::clicked,this,&QMainWindow::close);
// 把菜单项放进工具栏
toolBar->addAction(newFile);
toolBar->addSeparator();
toolBar->addAction(openFile);
和菜单栏大同小异,就不讲了
![](https://i-blog.csdnimg.cn/blog_migrate/ec8f8257af4b15b00dafe06074981a69.png)
状态栏
// 状态栏
QStatusBar * sta = statusBar();
setStatusBar(sta);
//放入标签
QLabel * label = new QLabel("左侧信息",this);
//将标签 放入到 状态栏中
sta->addWidget(label);
QLabel *la2 = new QLabel("右侧信息",this);
sta->addPermanentWidget(la2); // 从右往左放
铆接部件
// 铆接部件 浮动窗口
QDockWidget * dock = new QDockWidget("铆接部件",this);
addDockWidget(Qt::BottomDockWidgetArea,dock);
// 铆接部件的位置是相对于核心部件的
// 停靠范围
dock->setAllowedAreas(Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea);
核心部件
核心部件可以是任意类型的需要放在窗口中的对象
这里举一个文本编辑的例子
// 核心部件 只能一个
QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);
以上的QMainWindow
部件,函数都大同小异,要懂得举一反三
有两个点注意一下:
在把这些部件依赖到
QMainWindow
上时,好像不是用setParent(this)
都是用setMenuBar(menu)
或者addToolBar(toolBar)
这是因为这几个函数都是QMainWindow
的公有成员函数,QMainWindow
在定义时就拥有这些个部件,只需要对这些部件进行设置一下就可以
而前面写的文章中,定义一个QPushButton
对象,但QWidget
是一个空窗口,在定义时没有写上QPushButton
类型的成员对象,写上也不合理啊,谁规定空窗口一定要有按钮?
所以在需要把按钮依赖上QWidget
时,才用setParent(this)
另外,看哪些部件是只能有一个哪些是能有多个,可以看依赖时是用set
还是add
上面提到了成员对象,不知怎么的就脑子里冒出了个名词 —— 对象成员
这二者的区别是啥?
成员对象就是上面写的那样,一个类的成员变量,是由另一个类实例化出来的对象,这叫做成员对象
而对象成员,其实就是类实例化的对象,含有的成员变量和成员函数的总称,叫做对象的成员,简称对象成员