Qt学习之QMainWindow(一)QMainWindow简介

Qt中的顶层窗口称为MainWindow,属于类QMainWindow,QMainWindow也是继承于QWidget。通过子类化QMainWindow可以创建一个应用程序的窗口。

MainWindow的结构分为五个部分:菜单栏(Menu Bar)、工具栏(Toolbars)、停靠窗口(Dock Widgets)、状态栏(Status Bar)和中央窗口(Central Widget)。可以用下面的图形表示之。

其中,中央窗口可以使用任何形式的widget来填充。一般不建议使中央窗口为空。可以使用setCentralWidget()函数来填充中央窗口。

一、Menu Bar

首先要区分好菜单与菜单栏。菜单是QMenu对象,然后将多个QMenu对象放置在一个QMenuBar(菜单栏)对象中。对于每个菜单,我们再为其添置动作列表,即QAction对象。步骤如下

mainwindow.h

 

 
  1. #ifndef MAINWINDOW_H

  2. #define MAINWINDOW_H

  3.  
  4. #include <QtGui/QMainWindow>

  5.  
  6. class QAction;

  7. class QMenu;

  8.  
  9. class MainWindow : public QMainWindow

  10. {

  11. Q_OBJECT

  12. protected:

  13. QAction *openAction; //定义一个动作

  14. QMenu *fileMenu; //定义一个菜单

  15.  
  16. public:

  17. MainWindow(QWidget *parent = 0);

  18. ~MainWindow();

  19. };

  20.  
  21. #endif // MAINWINDOW_H

mainwindow.cpp

 

 
  1. <pre name="code" class="cpp"><pre name="code" class="cpp">#include "mainwindow.h"

  2.  
  3. #include <QMenu>

  4. #include <QMenuBar>

  5. #include <QAction>

  6.  
  7. MainWindow::MainWindow(QWidget *parent)

  8. : QMainWindow(parent)

  9. {

  10. openAction = new QAction(tr("Open"),this); //初始化动作

  11. fileMenu = new QMenu; //创建一个菜单

  12. fileMenu = menuBar()->addMenu(tr("File")); //将菜单添加到菜单栏上

  13. fileMenu->addAction(openAction); //将动作添加到菜单上

  14. }

  15.  
  16. MainWindow::~MainWindow()

  17. {

  18.  
  19. }

 

 

 

 

运行结果如下:

 

思路已经很清晰了,首先创建一个菜单File,将它添加到菜单栏上,然后再将动作Open添加到此菜单下。其中,注意到菜单栏是单数,即Menu Bar中的Bar是单数(这里跟工具栏要区分开),QMainWindw类中有一个叫MenuBar()的函数,用来返回MainWindow的菜单栏(一个QMenuBar对象),然后QMenuBar类中有一个addMenu()函数用来添加一个菜单到菜单栏中。

二、ToolBars

为什么我要强调菜单栏中是单数而工具栏中是复数,这是为了理解两种Bar的不同用法。

首先,在MainWindw中菜单栏并不止一个,可以自己创建,所以并不是从QMainWindow中的哪个函数来返回哪个工具栏。因此,第一步要创建一个工具栏。在QMainWindow类中有addToolBar()函数来添加工具栏,然后根据QToolBar类中的addAction()函数来为新建的工具栏添加动作。具体示例代码如下:

mainwindow.h

 

 
  1. #ifndef MAINWINDOW_H

  2. #define MAINWINDOW_H

  3.  
  4. #include <QtGui/QMainWindow>

  5.  
  6. class QAction;

  7. class QToolBar;

  8.  
  9. class MainWindow : public QMainWindow

  10. {

  11. Q_OBJECT

  12. protected:

  13. QAction *openAction; //定义一个动作

  14. QToolBar *fileToolBar; //定义一个工具栏

  15.  
  16. public:

  17. MainWindow(QWidget *parent = 0);

  18. ~MainWindow();

  19. };

  20.  
  21. #endif // MAINWINDOW_H

mainwindow.cpp

 

 
  1. #include "mainwindow.h"

  2.  
  3. #include <QToolBar>

  4. #include <QAction>

  5.  
  6. MainWindow::MainWindow(QWidget *parent)

  7. : QMainWindow(parent)

  8. {

  9. openAction = new QAction(tr("Open"),this); //初始化动作

  10. fileToolBar = new QToolBar; //创建一个工具栏

  11. fileToolBar = addToolBar(tr("File")); //添加工具栏到顶层窗口中

  12. fileToolBar->addAction(openAction); //为新建的工具栏添加动作

  13. }

  14.  
  15. MainWindow::~MainWindow()

  16. {

  17.  
  18. }


这个过程很清晰了。

总结一下:

菜单栏是MainWindow中已经有的,需要是就使用menuBar()函数来返回;工具栏需要自己新建,然后在通过addToolBar()函数添加到窗口中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值