http://www.devbean.net/2012/09/qt-study-road-2-menubar-toolbar-statusbar/

在之前的《添加动作》一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction可以添加到菜单上、工具栏上。期间,我们还详细介绍了一些细节问题,比如资源文件的使用、对象模型以及布局管理器。这一节则是详细介绍关于菜单栏、工具栏以及状态栏的相关内容。

我们假设窗口还是建立在QMainWindow类之上,这会让我们的开发简单许多。当然,在实际开发过程中,QMainWindow通常只作为“主窗口”,对话框窗口则更多地使用QDialog类。我们会在后面看到,QDialog类会缺少一些QMainWindow类提供方便的函数,比如menuBar()以及toolBar()

下面还是回到《添加动作》一文中的代码片段:

1
2
3
4
5
6
7
8
9
10

openAction = new QAction ( QIcon ( ":/images/doc-open" ) , tr ( "&Open..." ) , this ) ;
openAction -> setShortcuts ( QKeySequence :: Open ) ;
openAction -> setStatusTip ( tr ( "Open an existing file" ) ) ;
connect ( openAction , & QAction :: triggered , this , MainWindow :: open ) ;
QMenu * file = menuBar ( ) -> addMenu ( tr ( "&File" ) ) ;
file -> addAction ( openAction ) ;
QToolBar * toolBar = addToolBar ( tr ( "&File" ) ) ;
toolBar -> addAction ( openAction ) ;

我们看到,使用menuBar()函数,Qt 为我们创建了一个菜单栏。menuBar()QMainWindow提供的函数,因此你是不会在QWidget或者QDialog中找到它的。这个函数会返回窗口的菜单栏,如果没有菜单栏则会新创建一个。这也就解释了,为什么我们可以直接使用menuBar()函数的返回值,毕竟我们并没有创建一个菜单栏对象啊!原来,这就是menuBar()为我们创建好并且返回了的。

Qt 中,表示菜单的类是QMenuBar(你应该已经想到这个名字了)。QMenuBar代表的是窗口最上方的一条菜单栏。我们使用其addMenu()函数为其添加菜单。尽管我们只是提供了一个字符串作为参数,但是 Qt 为将其作为新创建的菜单的文本显示出来。至于 & 符号,我们已经解释过,这可以为菜单创建一个快捷键。当我们创建出来了菜单对象时,就可以把QAction添加到这个菜单上面,也就是addAction()函数的作用。

下面的QToolBar部分非常类似。顾名思义,QToolBar就是工具栏。我们使用的是addToolBar()函数添加新的工具栏。为什么前面一个是menuBar()而现在的是addToolBar()呢?因为一个窗口只有一个菜单栏,但是却可能有多个工具栏。如果我们将代码修改一下:

1
2
3
4
5

QToolBar * toolBar = addToolBar ( tr ( "&File" ) ) ;
toolBar -> addAction ( openAction ) ;
QToolBar * toolBar2 = addToolBar ( tr ( "Tool Bar 2" ) ) ;
toolBar2 -> addAction ( openAction ) ;

我们看到,现在有两个工具栏了:

工具栏可以设置成固定的、浮动的等等,具体设置可以参考 Qt 文档。

前面我们说过,使用QAction::setStatusTip()可以设置该动作在状态栏上的提示文本。但我们现在把鼠标放在按钮上,是看不到这个提示文本的。原因很简单,我们没有添加一个状态栏。怎么添加呢?类似前面的QMainWindow::menuBar()QMainWindow有一个statusBar()函数。让我们把这个函数添加上去:

1
2
3
4

QToolBar * toolBar2 = addToolBar ( tr ( "Tool Bar 2" ) ) ;
toolBar2 -> addAction ( openAction ) ;
statusBar ( ) ;

然后编译运行一下:

我们添加了一个孤零零的statuBar()显得不伦不类,但是,同前面的menuBar()的实现类似,这个函数会返回一个QStatusBar对象,如果没有则先创建再返回。

QStatusBar继承了QWidget,因此,我们可以将其它任意QWidget子类添加到状态栏,从而实现类似 Photoshop 窗口底部那种有比例显示、有网格开关的复杂状态栏。有关QStatusBar的更多信息,请参考 Qt 文档。

对于没有这些函数的QDialog或者QWidget怎么做呢?要记得,QToolBar以及QStatusBar都是QWidget的子类,因此我们就可以将其结合布局管理器添加到另外的QWidget上面。QLayout布局提供了setMenuBar()函数,可以方便的添加菜单栏。具体细节还是详见文档。

至此,我们已经将组成窗口元素介绍过一遍。结合这些元素以及布局管理,我们就应该可以实现一个简单的通用的窗口。当我们完成窗口布局之后,我们就可以考虑向其中添加功能。这就是我们后面章节的内容。

菜单栏、工具栏和状态栏相关推荐

  1. Qt5.12实战之菜单栏工具栏与状态栏使用

    演示效果: 1.widget工程创建 2.ui设计 双击打开下图所示的.ui文件 菜单设计: 添加子菜单 修改QMenu及QAction对象名称为可识别名  具体修改操作如下: QMenu和QActi ...

  2. 【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

    在QMainWidget基础上实现菜单栏.工具栏.状态栏.右键菜单. 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> ...

  3. python界面不同按钮实现不同功能-三、PyQt5不同方法创建菜单栏、工具栏和状态栏...

    创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...

  4. Qt学习三 - 菜单栏、工具栏、状态栏

    MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi( ...

  5. 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow

    1. 窗口应用布局样式及组成 PC端软件,最基本的一个窗口应用布局样式,如下: 大体可分为菜单栏.工具栏.状态栏.核心窗口.浮动窗口,使用时按需相互组合. 2. Qt中调用这些控件 1)新建一个工程: ...

  6. Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

    目录 1.菜单栏 1.1.Qt Creator创建菜单栏 1.2. 菜单栏类创建菜单栏 2.工具栏 2.1.Qt Creator创建工具栏 2.2. 工具栏类创建工具栏 3.状态栏 在使用Qt Cre ...

  7. C#应用程序界面开发基础——窗体控制(6)——菜单栏、工具栏和状态栏控件

    菜单栏.工具栏和状态栏控件 菜单栏描述了一个窗体的大致功能和风格.通过工具栏能够快速执行相应的功能,并且具有和菜单一样的功能,而状态栏常用于显示 一些状态信息. 1.菜单控件 菜单(MunuStrip ...

  8. Qt菜单栏-工具栏-状态栏

    1.创建动作 QAction是Qt中用于添加动作的类,可以将它添加在菜单,作为一个菜单项,也可以添加到工具栏,作为一个工具栏按钮. 其中参数一是设置该操作按钮的图标,":/images/ic ...

  9. Qt纯代码实现菜单栏、工具栏、状态栏

    目录 菜单栏 工具栏 状态栏 总体效果 在QWidget中实现菜单栏.工具栏.状态栏 其他 子窗口获取父窗口指针 QWidget阻塞模式 本篇演示的例子是在QMainWindow中进行的,在QWidg ...

最新文章

  1. mysql并发 node_nodejs下mysql性能测试
  2. 深入剖析通信层和RPC调用的异步化(上)
  3. weblogic配置文件学习总结
  4. IDEA出现import org.junit.Test飘红解决方案
  5. USTC English Club Note20211208
  6. Oracle运行set autotrace on报错SP2-0618、SP2-0611
  7. php异步处理任务工具,PHP实现异步任务分发处理利器-Gearman
  8. API 层实现语音录制
  9. (转)goldengate 复制进程replicat出现ORA-01403 错误
  10. nginx多域名设置和多子目录实现共用一端口
  11. java--线程--习题集锦
  12. XCTF-攻防世界-密码学crypto-新手练习区-writeup
  13. rpmbuild php,linux RPM打包时出错,求助!!!
  14. 怎么用计算机把浓度转换成PH,ph浓度换算(ph怎么换算OH浓度)
  15. 百分点大数据技术团队:BI嵌入式分析实践
  16. java解析宏文件,从命令行或批处理文件运行Excel宏的方法?
  17. 短信验证码常见漏洞总结
  18. webpack中的chunk
  19. C语言基本数据类型输入输出格式
  20. QQ宠物智能辅助开发

热门文章

  1. 实现Ubuntu与Nvida Nano远程连接
  2. Nvida driver CUDA
  3. java 强制gc_如何强制GC回收垃圾
  4. 上海交通大学2022年计算机考研复试分数线
  5. 网络原理实验2 路由器的基本配置
  6. 数据湖(四):Hudi与Spark整合
  7. 网页宽度为多少才可以打印出A4纸
  8. 十一、Oracle 触发器
  9. golang go/pkg/mod/github.com/agiledragon/gomonkey@v2.0.2+incompatible/patch.go:163:10: undefined: bu
  10. 东北大学软件学院与计算机学院,东北大学软件学院一行来我校计算机学院交流访问...