zoukankan      html  css  js  c++  java
  • QT_4-QMainWindow

    QT_4 QMainWindow

    QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。

    enter description here

    菜单栏

    一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。

    • 创建菜单栏,通过QMainWindow类的menubar()函数获取主窗口菜单栏指针
      QMenuBar * menuBar() const
    • 创建菜单,调用QMenu的成员函数addMenu来添加菜单
      QAction* addMenu(QMenu * menu)
      QMenu* addMenu(const QString & title)
      QMenu* addMenu(const QIcon & icon, const QString & title)
    • 创建菜单项,调用QMenu的成员函数addAction来添加菜单项
      QAction* activeAction() const
      QAction* addAction(const QString & text)
      QAction* addAction(const QIcon & icon, const QString & text)
      QAction* addAction(const QString & text, const QObject * receiver,
      const char * member, const QKeySequence & shortcut = 0)
      QAction* addAction(const QIcon & icon, const QString & text,
      const QObject * receiver, const char * member,
      const QKeySequence & shortcut = 0)
      Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作

    工具栏

    主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分。

    • 直接调用QMainWindow类的addToolBar()函数获取主窗口的工具条对象,每增加一个工具条都需要调用一次该函数。
    • 插入属于工具条的动作,即在工具条上添加操作。
      通过QToolBar类的addAction函数添加。
    • 工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括:
      Qt::LeftToolBarArea 停靠在左侧
      Qt::RightToolBarArea 停靠在右侧
      Qt::TopToolBarArea 停靠在顶部
      Qt::BottomToolBarArea 停靠在底部
      Qt::AllToolBarAreas 以上四个位置都可停靠
    • 使用setAllowedAreas()函数指定停靠区域:
      setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea)
      使用setMoveable()函数设定工具栏的可移动性:
      setMoveable(false)//工具条不可移动, 只能停靠在初始化的位置上

    状态栏

    • 派生自QWidget类,使用方法与QWidget类似,QStatusBar类常用成员函数:
      //添加小部件
      void addWidget(QWidget * widget, int stretch = 0)
      //插入小部件
      int insertWidget(int index, QWidget * widget, int stretch = 0)
      //删除小部件
      void removeWidget(QWidget * widget)

    例:

    包含文件:
     mainwindow.h
     mainwindow.cpp
    

    mainwindow.h文件:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QMainWindow>
    #include <QDebug>
    #include <QMenuBar> //  菜单栏头文件
    #include <QMenu>  //菜单栏中的单独菜单头文件
    #include <QToolBar> //工具栏头文件
    #include <QPushButton> 
    #include <QStatusBar> //状态栏头文件
    #include <QLabel>
    #include <QTextEdit>
    #include <QDockWidget>  //浮动窗口头文件
    class MainWindow : public QMainWindow {
        Q_OBJECT
    public:
        MainWindow(QWidget *parent = 0);
        ~MainWindow();
    };
    #endif // MAINWINDOW_H
    

    mainwindow.cpp文件:

    #include "mainwindow.h"
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent) {
        resize(600, 300);
        //Crate menubar
        //QmenuBar *mBar = mnuBar();
        QMenuBar *menuBar = new QMenuBar(this);
        // Add menu
        QMenu *pFile = menuBar->addMenu("File");
    
        QAction *pNew = pFile->addAction("new");
    
        connect(pNew, &QAction::triggered, //Add events to new
                [=]() {
            qDebug() << "New";
        });
    
        pFile->addSeparator(); // Add separator line
        QAction *pOpen = pFile->addAction("open");
    
        //***************************************
        //Tools bar:A shortcut to a menu item
        QToolBar *toolBar = addToolBar("toolBar");
        //Add shortcut
        toolBar->addAction(pNew);
    
        //Add little contronl
        QPushButton *b = new QPushButton();
        b->setText("@_@");
        toolBar->addWidget(b);
        connect(b, &QPushButton::clicked,
                [=](){
           b->setText("^_^");
        });
    
        //***************************************
        //Qtatusbar:
    	
        QStatusBar *sBar = new QStatusBar(this);
        sBar->move(0, 20);
    
        QLabel *label = new QLabel(this);
        label->setText("Yes! YOu are right!");
    
        sBar->addWidget(label); //The method 1 of add widget ->
        sBar->addWidget(new QLabel("1314", this)); //The method 2 of add widget ->
        sBar->addPermanentWidget(new QLabel("520", this)); //The method 3 of add widget ->
    
        //***************************************
        //Core Control
        QTextEdit *Te = new QTextEdit(this);
        setCentralWidget(Te);
        //Te->move(100,50);
    
        //floating window
        QDockWidget *dock = new QDockWidget(this);
        dock->setWidget(Te);
        addDockWidget(Qt::BottomDockWidgetArea, dock);
    }
    MainWindow::~MainWindow(){
    }
    
  • 相关阅读:
    Duilib学习笔记《04》— 窗体显示
    Duilib学习笔记《03》— 控件使用
    Duilib学习笔记《02》— 界面布局
    Duilib扩展《01》— 双击、右键消息扩展
    Duilib学习笔记《01》— duilib整体框架认识
    C++中rapidxml用法及例子
    C++ Namespace 详解
    Sencha touch navigation 内嵌list,itemTap第二次点击不跳转的问题
    Webapp meta标签解决移动缩放的问题
    (转载)Web存储和SessionStorage locaStorage
  • 原文地址:https://www.cnblogs.com/lyxf/p/12264143.html
Copyright © 2011-2022 走看看