概述
菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Designer通过拖拽的形式来实现,减少了大量的代码,使用简单。
纯代码方式创建
创建CMainWindow类,基类为QMainWindow,在构造函数中添加如下代码
添加菜单栏代码:
//菜单栏===================================================
//创建菜单栏
QMenuBar *bar = menuBar();
//将菜单栏放到窗口
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu(QString::fromLocal8Bit("文件"));
QMenu * editMenu = bar->addMenu(QString::fromLocal8Bit("编辑"));
//创建菜单项
QAction * newAction = fileMenu->addAction(QString::fromLocal8Bit("新建"));
fileMenu->addSeparator(); //添加分隔符
QAction * openAction = fileMenu->addAction(QString::fromLocal8Bit("打开"));
添加工具栏代码:
//工具栏===================================================
//创建工具栏
QToolBar * toolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea, toolBar);
//后期设置 只允许 左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置浮动
toolBar->setFloatable(false);
//固定工具栏
toolBar->setMovable(false);
//工具栏中设置内容
toolBar->addAction(newAction);
toolBar->addSeparator();
toolBar->addAction(openAction);
//工具栏中添加空间
QPushButton* btn1 = new QPushButton(QString::fromLocal8Bit("按钮"), this);
toolBar->addWidget(btn1);
连接信号槽:
//信号槽连接
connect(newAction, &QAction::triggered, this, &CMainWindow::menuNewSlot);
添加状态栏代码:
//状态栏======================================================最多一个
QStatusBar * stBar = statusBar();
//设置到窗口
setStatusBar(stBar);
//放标签空间
QLabel* label1 = new QLabel(QString::fromLocal8Bit("提示信息"), this);
stBar->addWidget(label1);
//右侧提示信息
QLabel* label2 = new QLabel(QString::fromLocal8Bit("右侧提示信息"), this);
stBar->addPermanentWidget(label2);
添加铆接窗口代码:
//铆接窗口
QDockWidget* dockWidget = new QDockWidget(QString::fromLocal8Bit("浮动"), this);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget);
//设置停靠范围
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//放置控件
dockWidget->setWidget(new QLabel(QString::fromLocal8Bit("铆接窗口中的内容\n今天天气不错\n\n\n")));
//设置中心部件
QTextEdit * textEdit = new QTextEdit();
setCentralWidget(textEdit);
Qt Designer拖拽方式创建
菜单栏
1.新建项目UI基类选择QMainWindow。
2.双击在这里输入,可修改一级菜单的名称。
3.动作编辑器里添加actionOpen,actionSave两个动作
4.鼠标左键拖拽action到文件下的二级菜单即可,同时打开和保存之间可以添加分隔符
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);
工具栏
菜单下方的区域就是用来存放工具栏。
添加工具栏更简单,直接拖拽acitonOpen,actionSave到该区域即可
常用方法:
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的边框