概述

菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Designer通过拖拽的形式来实现,减少了大量的代码,使用简单。

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

菜单栏

1.新建项目UI基类选择QMainWindow。

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

2.双击在这里输入,可修改一级菜单的名称。

3.动作编辑器里添加actionOpen,actionSave两个动作

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

4.鼠标左键拖拽action到文件下的二级菜单即可,同时打开和保存之间可以添加分隔符

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

5.头文件中添加槽

private slots:
void OnOpenFile();
void OnSaveFile();

6.源文件实现槽函数

/************************************
@ Brief: 打开文件
@ Author: 红烧肉
@ Created: 2019/04/22
@ Return:
************************************/
void MenuDialog::OnOpenFile()
{
QMessageBox::information(this, "提示", "点击了打开Action", QMessageBox::Yes);
} /************************************
@ Brief: 保存文件
@ Author: 红烧肉
@ Created: 2019/04/22
@ Return:
************************************/
void MenuDialog::OnSaveFile()
{
QMessageBox::information(this, "提示", "点击保存Action!", QMessageBox::Yes)
}

7.构造函数里连接信号与槽

    connect(ui.actionOpen, &QAction::triggered, this, &MenuDialog::OnOpenFile);
connect(ui.actionSave, &QAction::triggered, this, &MenuDialog::OnSaveFile);

工具栏

菜单下方的区域就是用来存放工具栏。

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

添加工具栏更简单,直接拖拽acitonOpen,actionSave到该区域即可

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

常用方法:

void setMovable(bool movable):设置工具栏区域是否可移动

void setAllowedAreas(Qt::ToolBarAreas areas):设置工具栏可移动的范围

void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle):设置工具栏按钮的风格,如纯图标,文字,文字图标都有等

状态栏  

常用方法

void addWidget(QWidget *widget, int stretch = 0):状态栏左侧添加一个widget。对widget的拉伸系数为0。

void addPermanentWidget(QWidget *widget, int stretch = 0):状态栏右侧添加一个widget。

void setSizeGripEnabled(bool):设置右下角拖动缩放的控制点。

void showMessage(const QString &message, int timeout = 0):留言显示,过期时间为 timeout。

示例代码:

    statusBar()->addWidget(new QLabel("label1"));
statusBar()->addWidget(new QLabel("label2"));
statusBar()->addPermanentWidget(new QLabel("label3"));
statusBar()->addPermanentWidget(new QLabel("label4"));
statusBar()->showMessage("留言", 5000);
statusBar()->setSizeGripEnabled(false); //不显示右下角拖放控制点
statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}")); // QSS不显示label的边框

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

【Qt开发】菜单栏,工具栏和状态栏-LMLPHP

05-15 23:49