【Qt笔记】菜单栏、工具栏和状态栏

Qt 将用户与界面进行交互的元素抽象为一种“动做”,使用QAction类表示。QAction能够添加到菜单上、工具栏上。期间,咱们还详细介绍了一些细节问题,好比资源文件的使用、对象模型以及布局管理器。这一节则是详细介绍关于菜单栏、工具栏以及状态栏的相关内容。函数

咱们假设窗口仍是创建在QMainWindow类之上,这会让咱们的开发简单许多。固然,在实际开发过程当中,QMainWindow一般只做为“主窗口”,对话框窗口则更多地使用QDialog类。咱们会在后面看到,QDialog类会缺乏一些QMainWindow类提供方便的函数,好比menuBar()以及toolBar()工具

openAction = new QAction(QIcon(":/images/open_Icon"), 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()函数的做用。this

下面的QToolBar部分很是相似。顾名思义,QToolBar就是工具栏。咱们使用的是addToolBar()函数添加新的工具栏。为何前面一个是menuBar()而如今的是addToolBar()呢?由于一个窗口只有一个菜单栏,可是却可能有多个工具栏。若是咱们将代码修改一下:code

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()函数。让咱们把这个函数添加上去:ip

statusBar();

咱们添加了一个孤零零的statuBar()显得不三不四,可是,同前面的menuBar()的实现相似,这个函数会返回一个QStatusBar对象,若是没有则先建立再返回。资源

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

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

相关文章
相关标签/搜索