回到《添加动作》文中的代码:
1 openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this); 2 openAction->setShortcuts(QKeySequence::Open); 3 openAction->setStatusTip(tr("Open an existing file")); 4 connect(openAction, &QAction::triggered, this, MainWindow::open); 5 6 QMenu *file = menuBar()->addMenu(tr("&File")); 7 file->addAction(openAction); 8 9 QToolBar *toolBar = addToolBar(tr("&File")); 10 toolBar->addAction(openAction);
第6行,使用menuBar()函数创建了一个菜单栏,并将openAction这个动作添加到了菜单栏中。
menuBar()是QMainWindow提供的函数,可以看出返回类型是一个QMenu的指针(也就是返回了窗口的菜单栏)。如果没有菜单栏,则会新建一个。因此这里我们在还没创建一个菜单栏对象的情况下,直接使用这个menuBar()的返回值。
同样的道理,在第9行,用 addToolBar()创建工具栏,然后将openAction这个动作添加到工具栏中。为什么前面一个是menuBar()而现在的是addToolBar()呢?因为一个窗口只有一个菜单栏,但是却可能有多个工具栏。
如果多次使用addToolBar(),就能创建多个工具栏。
1 QToolBar *toolBar = addToolBar(tr("&File")); 2 toolBar->addAction(openAction); 3 4 QToolBar *toolBar2 = addToolBar(tr("Tool Bar 2")); 5 toolBar2->addAction(openAction);
前面我们说过,使用QAction::setStatusTip()
可以设置该动作在状态栏上的提示文本。但我们现在把鼠标放在按钮上,是看不到这个提示文本的。原因很简单,我们没有添加一个状态栏。类似前面的QMainWindow::menuBar()
,QMainWindow
有一个statusBar()
函数。让我们把这个函数添加上去:(加上一行代码)
1 QToolBar *toolBar2 = addToolBar(tr("Tool Bar 2")); 2 toolBar2->addAction(openAction); 3 4 statusBar();
效果图:
statuBar()与menuBar()相似,这个函数会返回一个QStatusBar对象,如果没有的话会先创建一个再返回。
原文:https://www.devbean.net/2012/09/qt-study-road-2-menubar-toolbar-statusbar/
原文:https://www.cnblogs.com/fategrandorder/p/9108018.html