QT自学记录(3)——QMainWindow的操作(菜单栏、工具栏)
一. QMainWindow简介
QmainWindow是QT推出的QWidget窗口的子类,相对QWidget而言,QMainWindow的细节相对更多,分区更细致,加入了分栏等新工具,使得设计变得更加直观。
QMainWindow的分区主要有以下几个:Menu Bar(菜单栏),Toolbars(工具栏),Dock Widget(悬浮窗),Main Widget(中央窗口)、Status Bar(状态栏)。

二. Menu Bar(菜单栏)的相关操作
1. 对Menu的操作
菜单栏顾名思义,是所有Menu(菜单)的集合,所以为了学习Menu Bar的相关操作,需要先学习Menu的相关操作。
在单击菜单标题后,会弹出此菜单下的所有内容:菜单下可以包含PushButton、ComboBox等内容,但是最基础的,也是最必要的,是Action(指令)。引入指令需要用到QAction库。定义指令后,即可用addAction()将指令加入菜单。
2. 对Menu Bar的操作
类似于将指令加入菜单,将菜单加入菜单栏也只是需要加一步addmenu()。
以下为mainwindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtGui/QMainWindow> class QAction; class QMenu; class MainWindow : public QMainWindow { Q_OBJECT protected: QAction *openAction; //定义一个动作 QMenu *fileMenu; //定义一个菜单 public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif
以下为mainwindow.cpp:
<pre name="code" class="cpp"><pre name="code" class="cpp">#include "mainwindow.h" #include <QMenu> #include <QMenuBar> #include <QAction> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { openAction = new QAction(tr("Open"),this); //初始化动作 fileMenu = new QMenu; //创建一个菜单 fileMenu = menuBar()->addMenu(tr("File")); //将菜单添加到菜单栏上 fileMenu->addAction(openAction); //将动作添加到菜单上 } MainWindow::~MainWindow() { }
三. Toolbar(工具栏)的相关操作
与Menu Bar将分组的Action以Menu的形式加入栏中不同,Toolbar直接将Action加入至栏中。
#include "widget.h" #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) { createView(); } void Widget::createView() { mainLayout = new QVBoxLayout; this->setLayout(mainLayout); addControls(); //添加按钮控件 craeteToolBar(); //创建工具栏 craeteMenu(); //创建按钮栏 mainLayout->setMargin(0); mainLayout->setSpacing(0); } void Widget::addControls() { //添加控件 m_PushButton = new QPushButton("test"); mainLayout->addWidget(m_PushButton); } void Widget::craeteToolBar() { //创建工具栏 m_ToolBar = new QToolBar; m_ToolBarActionGroup = new QActionGroup(this); QList<QAction*> m_ToolBarList; m_ActionToolBar1 = new QAction(QStringLiteral("ToolBar1")); m_ActionToolBar2 = new QAction(QStringLiteral("ToolBar2")); m_ActionToolBar1->setCheckable(true); m_ActionToolBar2->setCheckable(true); m_ToolBarList.append(m_ActionToolBar1); m_ToolBarList.append(m_ActionToolBar2); m_ToolBarActionGroup->addAction(m_ActionToolBar1); m_ToolBarActionGroup->addAction(m_ActionToolBar2); m_ToolBar->addActions(m_ToolBarList); m_ToolBar->setStyleSheet("background-color:rgb(200,40,43);color:rgb(204,204,204)"); mainLayout->addWidget(m_ToolBar); connect(m_ToolBarActionGroup,SIGNAL(triggered(QAction*)),this,SLOT(On_ClickedToolBarActionGroup(QAction *))); } void Widget::craeteMenu() { //创建菜单栏 m_Menu = new QMenu; m_MenuActionGroup = new QActionGroup(this); QList<QAction*> m_MenuList; m_ActionMenu1 = new QAction(QStringLiteral("Menu1")); m_ActionMenu2 = new QAction(QStringLiteral("Menu2")); m_ActionMenu1->setCheckable(true); m_ActionMenu2->setCheckable(true); m_MenuList.append(m_ActionMenu1); m_MenuList.append(m_ActionMenu2); m_MenuActionGroup->addAction(m_ActionMenu1); m_MenuActionGroup->addAction(m_ActionMenu2); connect(m_MenuActionGroup,SIGNAL(triggered(QAction*)),this,SLOT(On_ClickedMenuActionGroup(QAction *))); m_Menu->addActions(m_MenuList); mainLayout->addWidget(m_Menu); } void Widget::On_ClickedMenuActionGroup(QAction *action) { if(action->text().compare(m_ActionMenu1->text())==0) { qDebug()<<tr("m_ActionMenu1->text()==%1").arg(m_ActionMenu1->text()); } else if (action->text().compare(m_ActionMenu2->text())==0) { qDebug()<<tr("m_ActionMenu2->text()==%1").arg(m_ActionMenu2->text()); } } void Widget::On_ClickedToolBarActionGroup(QAction *action) { if(action->text().compare(m_ActionToolBar1->text())==0) { qDebug()<<tr("m_ActionToolBar1->text()==%1").arg(m_ActionToolBar1->text()); } else if (action->text().compare(m_ActionToolBar2->text())==0) { qDebug()<<tr("m_ActionToolBar2->text()==%1").arg(m_ActionToolBar2->text()); } }
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QVBoxLayout> #include <QHBoxLayout> #include <QMenu> #include <QActionGroup> #include <QPushButton> #include <QToolBar> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); void createView(); void addControls(); void craeteToolBar(); void craeteMenu(); private slots: void On_ClickedMenuActionGroup(QAction *action); void On_ClickedToolBarActionGroup(QAction *action); private: QVBoxLayout *mainLayout; // QVBoxLayout *mainWidgetLayout; // QWidget *mainWidget; QPushButton *m_PushButton; QMenu *m_Menu; QToolBar *m_ToolBar; QActionGroup *m_MenuActionGroup; QActionGroup *m_ToolBarActionGroup; QAction *m_ActionMenu1; QAction *m_ActionMenu2; QAction *m_ActionToolBar1; QAction *m_ActionToolBar2; }; #endif

浙公网安备 33010602011771号