普通的桌面应用程序有个共同的特性,有菜单栏、工具栏、状态栏、中央窗口等部件。菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口。那么这些典型的桌面应用可以认为是一些QWidget的组合,通过QWidget派生的方式也确实能够完成这样的窗口。
但是如果每次都自己去设计,重复这些工作,想想都有些麻烦,于是Qt帮我们实现这样的窗口,叫做QMainWindow,QMainWindow已经布置好菜单栏、工具栏、状态栏等窗口,我们只需要懂得如何去应用就行了。
QMainWindow的布局
注:MenuBar是菜单栏,toolbars是工具栏,Dock Widgets是停口窗口,Central Widget是中央窗口,Status Bar是状态栏
1 创建一个QMainWindow工程
在 Qt Creator 中,点击菜单”文件”
依次选择 “新建文件或项目->application->Qt widget application” 再点击 Choose…按钮
然后填写项目名称点击下一步, 到配置工具链窗口,再点击下一步.
到如图所示的窗口, 选择基类为 QMainWindow, 不勾选”创建界面”(其实也可以勾选), 如图
再点击下一步, 到版本控制窗口,然后再点击完成,那么我们的 QMainWindow 的一个工程就创建好了。
2 菜单栏应用
2.1 添加菜单栏
在Qt中菜单栏类是QMenuBar,它也是继承至QWidget,菜单栏是一个长条状窗口,可以是横向也可以是纵向的,菜单栏上可以布置菜单。
通过QMainWindow::MenuBar() 来获取一个QMenuBar对象的指针, 如果该对象不存在, 就新建一个对象。这个函数只能创建一个菜单栏,函数原型如下:
QMenuBar *QMainWindow::menuBar()
例如:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
QMenuBar* menuBar = this->menuBar();
}
也可以通过new一个QMenuBar对象,然后通过QMainWindow::setMenuBar来设置主窗口的菜单栏。
void QMainWindow::setMenuBar(QMenuBar *menuBar)
例如:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
QMenuBar* menuBar = new QMenuBar;
this->setMenuBar(menuBar);
}
2.2 添加菜单
创建完菜单栏之后,就可以在菜单栏上面布置菜单了,菜单类叫作QMenu,QMenu也是继承至QWidget。
QMenuBar对象中添加QMenu对象可以使用函数:
QAction *QMenuBar::addMenu(QMenu *menu) //添加一个已经创建好的QMenu对象
QMenu *QMenuBar::addMenu(const QString &title) //给定菜单标题,自动创建QMenu对象
例如:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar* menuBar = this->menuBar();
QMenu *fileMenu = new