zoukankan      html  css  js  c++  java
  • QT基础:QMainWindow学习小结

    简述

    普通的桌面应用程序有个共同的特性,有菜单栏、工具栏、状态栏、中央窗口等部件。菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口。那么这些典型的桌面应用可以认为是一些QWidget的组合,通过QWidget派生的方式也确实能够完成这样的窗口。

     

    但是如果每次都自己去设计,重复这些工作,想想都有些麻烦,于是Qt帮我们实现这样的窗口,叫做QMainWindowQMainWindow已经布置好菜单栏、工具栏、状态栏等窗口,我们只需要懂得如何去应用就行了。

    QMainWindow的布局

    QMainWindow类创建一个主应用程序的窗口,类似于MFC中中的单文档/多文档,其基本布局如下:

        MenuBar是菜单栏,toolbars是工具栏,Dock Widgets是停口窗口,Central Widget是中央窗口,Status Bar是状态栏。中央窗口是必须的,即使它只是一个占位符也必须存在。

    创建一个QMainWindow工程

    初始化的QMainWindow窗口就具有以下控件:QMenuBar-菜单栏、QToolBar-工具栏、QStatusBar-状态栏

    中央窗口

    一个中央窗口是一个典型的QT部件,例如QTextEdit或者QGraphicsView,可以自定义部件用于高级应用。可以使用setCentralWidget()函数来设置中央窗口。

    主窗口可以是一个单文档或者多文档界面,可以使用QMdiArea作为中心部件。

    QMainWindow的中央窗口可以使用QMainWindow::CentralWidget来设置一个QWidget对象或者派生类对象作为主窗口的中央窗口。

    QTextEdit * edit = new QTextEdit(this);

    this->setCentralWidget(edit);

     

     

    菜单

    Qt中菜单栏类是QMenuBar,它也是继承至QWidget,菜单栏是一个长条状窗口,可以是横向也可以是纵向的,菜单栏上可以布置菜单。这个大家好像都知道~

    可以在QT Designer中添加,菜单栏的Action被点击时会发出triggered()信号,然后在代码中将之和槽函数连接起来,便实现了一个一个功能。

    采用Qt Designer设计UI界面时,在编辑菜单时,输入菜单名称前面需要加"&",例如在菜单栏添加菜单"File"时,需要双击"在此处输入"的地方输入"&File",并且按下"Enter"键,这样才能保证File创建成功。

    新建好后,在下面建立子菜单"New"

    "Action Editor"中右键,选择"转到槽"…

     选择"triggered()"信号,点击[OK]…

     

    通过QMainWindow::MenuBar() 来获取一个QMenuBar对象的指针, 如果该对象不存在, 就新建一个对象。

    可以通过new一个QMenuBar对象,然后通过QMainWindow::setMenuBar来设置主窗口的菜单栏。

    创建完菜单栏之后,就可以在菜单栏上面布置菜单了,菜单类叫作QMenuQMenu也是继承至QWidget

    菜单中的诸如打开、保存、关闭等,都是一个个动作,在Qt里面对应的类是QAction,它不是窗口类,它是继承至QObject。可以使用QMenu::addAction来添加动作,QMenu::addAction有多个重载的函数,都是返回一个新建的QAction对象。

    分隔符可以起到修饰的作用,使用QMenu::addSeparator()添加分割符号。

    工具栏

    工具栏类是QToolbarQToolbar对象中可以布置一些QAction动作,QToolbar继承至QWidget,主窗口可以使用QMainWindow::addToolBar来添加工具栏。

    采用Qt Designer设计UI界面时,在编辑工具栏时,现在"Action Editor"中新建Action,然后将新建好的Action拖动到Toolbar上面去即可。

    状态栏

    Qt中的状态栏类是QStatusBar,也是继承至QWidget,状态栏用来显示程序的运行状态,比如"就绪、编辑中"。

    QStatusBar::showMessage函数可以用来设置状态栏的显示信息

    ui->statusBar->setSizeGripEnabled(false);

    ui->statusBar->showMessage(tr("临时信息!"), 2000);

    停靠窗口

    Qt中停靠窗口类为QDockWidgetQDockWidget继承至QWidget,这种窗口可以停靠在主窗口的停靠区域。

    QDockWidget*dock= new QDockWidget("dock", this);

    QTextEdit*edit= new QTextEdit("dock", dock);

    dock->setWidget(edit);

    this->addDockWidget(Qt::LeftDockWidgetArea, dock);

     

  • 相关阅读:
    高德地图(智能硬件)定位
    sql语句之条件,分页,排序
    MySQL语句基本操作增删改查
    语句基本操作,创建表,外键
    mysql权限操作
    Mysql数据库
    GIL
    计算密集型任务
    线程进程
    server端并发聊天
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10331001.html
Copyright © 2011-2022 走看看