目录
Qt窗口
前言:之前以上的代码我们都是创建项目基于QWidget(控件)的项目,实际上在开发过程中使用更多的是QMainWindow.QMainWindow的布局如下:
最上层是一个窗口的标题,下面是一个菜单栏,在下层是一个工具栏,在下层就是一个子窗口(铆接部件),最中间的就是中央控件。最下层有一个状态栏。通过这种方式我们的窗口就更加丰富了。接下来就逐一讲解每个部分。
当我们创建项目,生成的代码好像和QWidget的大差不差,进入QT Designer观察好像也差不多,但当我们仔细观察右边的对象树,我们就会发现,不仅仅有一个主窗口,还多了其他部件(菜单栏,状态栏),这些部件在项目创建的时候就被自带了,这里将所有组件进行介绍:
1.菜单栏
我们可以看到在新建的项目中的ui的界面中的有一个请输入,这个其实就是一个菜单,我们可以选中输入,还可以添加菜单项,还可以添加菜单。这就是MianWindow的布局,上来就是菜单,最上层就是标题。
添加菜单以及菜单项
//创建菜单栏
QMenuBar * menubar=new QMenuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu * menu1=new QMenu("文件(&F)");
QMenu * menu2=new QMenu("编辑(&E)");
QMenu * menu3=new QMenu("视图(&V)");
QMenu * menu4=new QMenu("构建(&B)");//并且设置简易快捷键alt+快捷键,淡然使用shrotcut创建快捷键也可以
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
menubar->addMenu(menu4);
//添加菜单项
QAction* action1=new QAction("新建");
QAction * action2=new QAction("打开");
QAction * action3=new QAction("保存");
QAction * action4=new QAction("另存为");
QAction * action5=new QAction("退出");
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
menu1->addAction(action4);
menu1->addAction(action5);
//给具体Action添加信号槽,或者给menu添加信号槽
connect(action1,&QAction::triggered,this,&MainWindow::handle);
给菜单添加子菜单
//QMenuBar可以addMenu代表菜单,给QMenu菜单对象也可以addMenu。即菜单的子菜单
QMenu* test1=new QMenu("新建");
QMenu * test2=new QMenu("打开");
menu2->addMenu(test1);
menu2->addMenu(test2);
此外我们还可以添加分割线,使用QMenu中的addseprator这样的函数,将我们的菜单项分成几部分。
//设置分割并且添加图标。
menu1->addSeparator();
//对菜单项行图标i的设置,当然菜单也是可以设置的
menu1->setIcon(QPixmap(":/pictures/file.png"));//菜单设置图标会将标题覆盖掉
action1->setIcon(QPixmap(":/pictures/files.png"));
action2->setIcon(QPixmap(":/pictures/fileopen.png"));
但是这里的代码有一个小问题,我们这里是自己创建的一个菜单栏,然后添加到窗口当中,二在项目创建之后就已经为我们创建好了一个MenuBar,此时改菜单栏就失去了与对象树的连接,我们自己创建的这个可以不用我们释放,但是原先的这个就需要我们去释放,否则会造成内存泄漏。
2.工具栏
QMianWindow的第三层就是工具栏QToolBar Area,在上下左都能可以进行工具栏的设置。
实际上就是一堆按钮,进行某些简单工具的快速使用。
QToolBar * toolbar=new QToolBar();
this->addToolBar(toolbar);//这里是add说明工具栏可以有多个,而setMenubar说明只能设置一个。
toolbar->setMovable(true);//设置可以拖拽
QAction* a1=new QAction("计算器");
QAction * a2=new QAction("保存");
toolbar->addAction(a1);
toolbar->addAction(a2);
除了这种写法,工具栏中的action其实也可以出现在菜单中。其次我们在添加action的时候指定初始位置,在前面再加一个参数QLeftToolBarArea.
this->addToolBar(Qt::LeftToolBarArea,toolbar);
toolbar ->setAllowedAreas(Qt::LeftToolBarArea| Qt::RightToolBarArea);
• Qt::LeftToolBarArea 停靠在左侧• Qt::RightToolBarArea 停靠在右侧• Qt::TopToolBarArea 停靠在顶部• Qt::BottomToolBarArea 停靠在底部• Qt::AllToolBarAreas 以上四个位置都可停靠