欢迎您的访问
专注架构,Java,数据结构算法,Python技术分享

Qt实战:菜单栏,工具栏,状态栏,铆接窗口

概述

菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码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的边框

赞(6) 打赏
版权归原创作者所有,任何形式转载请联系作者;码农code之路 » Qt实战:菜单栏,工具栏,状态栏,铆接窗口

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏