在学习菜单栏、工具栏、状态栏之前,我们需要了解一个叫“动作”的功能实现。
文章主要来源于:https://www.devbean.net/2012/09/qt-study-road-2-menubar-toolbar-statusbar/
QAction从名字上我们可以看出,这是一个类,它的功能是等待指令,执行工作。那么这个指令怎么来呢?比如菜单项、工具栏内按钮,用户在点击这些选项或按钮时,Qt得到反馈,执行指定功能。
QAction可以设置图标、快捷键、提醒文本。
以下展示的是QAction的构造函数。
explicit QAction(QObject *parent = nullptr);
explicit QAction(const QString &text, QObject *parent = nullptr);
explicit QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr);
快捷键源码:
void setShortcut(const QKeySequence &shortcut);
QKeySequence shortcut() const;
void setShortcuts(const QList<QKeySequence> &shortcuts);
void setShortcuts(QKeySequence::StandardKey);
QList<QKeySequence> shortcuts() const;
QKeySequences类称为按键序列,也就是设置快捷键的键位。
void setStatusTip(const QString &statusTip);
QString statusTip() const;
act = new QAction(QIcon("/Users/yucheng/allpic/help.png"),"帮助",this); //包括图标路径、长时间停留提示、父指针
act->setShortcut(QKeySequence::Open);
act->setStatusTip("帮助文本");
connect(act, &QAction::triggered, this, &MainWindow::ActionBehavior); //建立连接 当动作被触发后,调用ActionBehavior函数
菜单栏就是应用的最上端一行的功能选项,Mac端的菜单栏在最上方
要想使用这个方法,我们必须借助QMenu
类。
菜单大家 用的比较多,没什么好说的,举一个菜单例子,
act = new QAction(QIcon("/Users/yucheng/allpic/help.png"),"帮助",this);
act->setShortcut(QKeySequence::Open);
act->setStatusTip("帮助文本");
connect(act, &QAction::triggered, this, &MainWindow::ActionBehavior); //建立连接 当动作被触发后,调用ActionBehavior函数
QMenu * menu = this->menuBar()->addMenu("菜单"); //建立菜单
menu->addAction(act); //菜单中添加动作
有两点要说的是:
QMainWindow已经为我们提供了菜单栏,后面提及的工具栏和状态栏也是。所以我们不需要创建一个新的对象,直接使用QMainWindow中的自带菜单栏。
action中的提示文本在菜单栏中不可用。只能在工具栏中有提示。
何为工具栏?
在QT中,我们使用QToolBar
类来使用功能。
act = new QAction(QIcon("/Users/yucheng/allpic/help.png"),"帮助",this);
act->setShortcut(QKeySequence::Open);
act->setStatusTip("帮助文本");
connect(act, &QAction::triggered, this, &MainWindow::ActionBehavior); //建立连接 当动作被触发后,调用ActionBehavior函数
QMenu * menu = this->menuBar()->addMenu("菜单"); //建立菜单
menu->addAction(act); //菜单中添加动作
QToolBar * tool1 = this->addToolBar("帮助"); //建立工具栏
tool1->addAction(act); //工具栏添加动作
statusBar(); //建立状态栏,用于显示文本提示
当然还有菜单栏。没有截上。
由于菜单栏和工具栏的内容较多,不可能一次性学完。暂时就介绍一些基础用法。更深功能往后在看。