演示效果:

1.widget工程创建

2.ui设计

双击打开下图所示的.ui文件

菜单设计:

添加子菜单

修改QMenu及QAction对象名称为可识别名

 具体修改操作如下:

QMenu和QAction类似

在QAction列表中修改QAction对象

具体修改方法如下:

为QAction也就是菜单项目添加点击事件处理:

选择信号后,然后点击OK后,会自动关联信号,并实现槽函数

自动添加的槽

槽实现:

断点验证,点击新建菜单,成功进入对就的槽函数体中:

成功响应菜单点击

上面是通过设计窗口添加的菜单,与为菜单添加点击事件处理

下面为通过代码动态添加主菜单(一级菜单)及子菜单(二级菜单)如下图示

1.创建一个菜单项:

  QMenu *toolMenu =new QMenu();toolMenu->setTitle(QStringLiteral("主菜单"));

2.创建一个子菜单(QAction)

QAction *toolsAction = new QAction(QStringLiteral("子菜单"));

3. 添加子菜单到主菜单

toolMenu->addAction(toolsAction);

4.添加菜单项到菜单栏

 ui->menubar->addMenu(toolMenu);

此时,运行程序,菜单栏可看到主菜单了,点击主菜单也会弹出 子菜单

接下来为主菜单与子菜单关联信号与槽,使菜单点击有响应

 //子菜单点击事件connect(toolsAction,SIGNAL(triggered()),this,SLOT(OnCustMenuTriggered()));//菜单点击事件connect(toolMenu,SIGNAL(triggered(QAction*)),this,SLOT(OnCustMenuMainTriggered(QAction*)));

关联槽函数前,先定义与实现

定义:

 //自定义菜单点击事件槽void OnCustMenuTriggered();//void OnCustMenuMainTriggered(QAction *act);

实现:

void MainWindow::OnCustMenuTriggered()
{QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg("123"));
}void MainWindow::OnCustMenuMainTriggered(QAction *act)
{QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(act->text()));
}

现在,点击菜单有响应了

工具栏的实现与菜单栏的实现基本类似

唯一不同的是位置容器

和工具栏添加工具按钮的方法如下: (没有图标的工具栏只显示文本,有图标的,默认显示图标)

为工具栏的工具按钮关联信号与槽

选择信号后,点击OK,会自动创建槽函数

在槽函数中实现相关的功能,点击该工具按钮时会执行到该槽函数中,执行实现的功能

 工具按钮点击响应效果如下:

通过设计界面添加的方法很简单,下面通过代码来实现同样的功能

1.创建QAction

_ContextMenuAct = new QAction(QStringLiteral("退出"));

2.为QAction设置图标

 QIcon icon;icon.addFile(QString::fromUtf8(":/res/mfc.ico"), QSize(), QIcon::Normal, QIcon::Off);_ContextMenuAct->setIcon(icon);

3.取得UI设计器生成的工具栏对象,并向工具栏添加QAction

 ui->toolBar->addAction(_ContextMenuAct);

完成上面3步后,会自动向工具栏添加一个按钮

实时时:

运行后: 成功动态添加了一个工具栏按钮

下面来实现动态添加的工具栏按钮的信号与槽的关联

可通过实现器实现

也可通过自定义信号与槽,使用connet来关联(参考上面菜单实现方式)

最后,通过代码来实现状态栏挂件的动态添加并实现槽

1.先取得状态栏对象

 QStatusBar *_status=statusBar();

2.向状态栏添加对象

向状态栏添加标签

 QLabel *_labtmp = new QLabel;_labtmp->setMinimumSize(200,30);_labtmp->setFrameShadow(QFrame::Sunken);_labtmp->setText(QStringLiteral("一般信息:破解吧,哥们!"));_status->addWidget(_labtmp);

向状态栏添加按钮:

 QPushButton *_btn = new QPushButton();_btn->setText(QStringLiteral("入侵"));_status->addWidget(_btn);connect(_btn,SIGNAL(clicked()),this,SLOT(OnStatusBtnClicked()));

向状态栏添加永久性信息:

_status->addPermanentWidget(new QLabel(QStringLiteral("永久信息:让入侵成为一种快乐吧!")));

实现效果:

完整实现代码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_actionnew_triggered();void on_actionexit_triggered();void on_actioncopy_triggered();void on_actionparse_triggered();void on_actionabout_triggered();void on_actiontoolNew_triggered();//自定义菜单点击事件槽void OnCustMenuTriggered();//void OnCustMenuMainTriggered(QAction *act);void on_MainWindow_customContextMenuRequested(const QPoint &pos);void OnContextMenuExit();void OnStatusBtnClicked();
private:Ui::MainWindow *ui;void MenuActionEvent(QString text);QMenu *_contextMenu;QAction *_ContextMenuAct;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QLabel>
#include <QPushButton>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowTitle(QStringLiteral("Qt菜单与工具栏与状态栏测试"));//通过代码添加菜单项QMenu *toolMenu =new QMenu();toolMenu->setTitle(QStringLiteral("主菜单"));QAction *toolsAction = new QAction(QStringLiteral("子菜单"));toolMenu->addAction(toolsAction);//添加子菜单到主菜单ui->menubar->addMenu(toolMenu);//添加到菜单栏//子菜单点击事件connect(toolsAction,SIGNAL(triggered()),this,SLOT(OnCustMenuTriggered()));//菜单点击事件connect(toolMenu,SIGNAL(triggered(QAction*)),this,SLOT(OnCustMenuMainTriggered(QAction*)));//初始化上下文件菜单_contextMenu = new QMenu(this);_ContextMenuAct = new QAction(QStringLiteral("退出"));_contextMenu->addAction(_ContextMenuAct);connect(_ContextMenuAct,SIGNAL(triggered()),this,SLOT(OnContextMenuExit()));//添加工具栏按钮QIcon icon;icon.addFile(QString::fromUtf8(":/res/mfc.ico"), QSize(), QIcon::Normal, QIcon::Off);_ContextMenuAct->setIcon(icon);ui->toolBar->addAction(_ContextMenuAct);//状态栏操作QStatusBar *_status=statusBar();QLabel *_labtmp = new QLabel;_labtmp->setMinimumSize(200,30);_labtmp->setFrameShadow(QFrame::Sunken);_labtmp->setText(QStringLiteral("一般信息:破解吧,哥们!"));_status->addWidget(_labtmp);//添加状态栏一般信息QLabel *_lab = new QLabel;_lab->setMinimumSize(200,30);_lab->setFrameShadow(QFrame::Sunken);_lab->setText(QStringLiteral("一般信息:入侵吧,哥们!"));_status->addWidget(_lab);QPushButton *_btn = new QPushButton();_btn->setText(QStringLiteral("入侵"));_status->addWidget(_btn);connect(_btn,SIGNAL(clicked()),this,SLOT(OnStatusBtnClicked()));//添加状态栏永久信息_status->addPermanentWidget(new QLabel(QStringLiteral("永久信息:让入侵成为一种快乐吧!")));}MainWindow::~MainWindow()
{delete ui;
}//新建子菜槽函数实现
void MainWindow::on_actionnew_triggered()
{MenuActionEvent(ui->actionnew->text());
}void MainWindow::on_actionexit_triggered()
{MenuActionEvent(ui->actionexit->text());QApplication::exit(0);
}void MainWindow::on_actioncopy_triggered()
{MenuActionEvent(ui->actioncopy->text());
}void MainWindow::on_actionparse_triggered()
{MenuActionEvent(ui->actionparse->text());
}void MainWindow::on_actionabout_triggered()
{MenuActionEvent(ui->actionabout->text());
}void MainWindow::MenuActionEvent(QString text)
{QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(text));
}void MainWindow::on_actiontoolNew_triggered()
{MenuActionEvent(ui->actiontoolNew->text());
}void MainWindow::OnCustMenuTriggered()
{QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg("123"));
}void MainWindow::OnCustMenuMainTriggered(QAction *act)
{QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(act->text()));
}void MainWindow::on_MainWindow_customContextMenuRequested(const QPoint &pos)
{_contextMenu->exec(cursor().pos());
}void MainWindow::OnContextMenuExit()
{QApplication::exit(0);}void MainWindow::OnStatusBtnClicked()
{QMessageBox::information(this,NULL,QStringLiteral("入侵成功!"));QStatusBar *_status=statusBar();//添加状态栏临时信息_status->showMessage(QStringLiteral("入侵远程主机成功!恭喜你!"),2000);
}

Qt5.12实战之菜单栏工具栏与状态栏使用相关推荐

  1. Linux kubuntu x64系统下解决QT5.12编辑菜单和工具栏不显示图标问题

    Linux kubuntu x64系统下发现QT5.12在设计视图下编辑菜单和工具栏显示图标,但是编译运行后发现菜单和工具栏不显示图标,如下图: 我的解决办法是: 1.在QT项目中,菜单和工具栏图标一 ...

  2. 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow

    1. 窗口应用布局样式及组成 PC端软件,最基本的一个窗口应用布局样式,如下: 大体可分为菜单栏.工具栏.状态栏.核心窗口.浮动窗口,使用时按需相互组合. 2. Qt中调用这些控件 1)新建一个工程: ...

  3. python界面不同按钮实现不同功能-三、PyQt5不同方法创建菜单栏、工具栏和状态栏...

    创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...

  4. 在Windows应用程序中设计菜单栏、工具栏和状态栏

    1.5.2  在Windows应用程序中设计菜单栏.工具栏和状态栏 1.菜单栏的设计 在Windows应用程序中制作菜单栏时,可以使用MenuStrip控件.使用MenuStrip控件可以将菜单设计成 ...

  5. Qt菜单栏、工具栏和状态栏

    Qt 将用户与界面进行交互的元素抽象为一种 "动作",使用 QAction 类表示.QAction 可以添加到菜单上.工具栏上.期间,我们还详细介绍了一些细节问题,比如资源文件的使 ...

  6. Qt菜单栏、工具栏、状态栏介绍及工具栏action的动态增删显示实现方式

    Qt菜单栏.工具栏.状态栏介绍及工具栏action的动态增删显示实现方式 版本说明 版本 作者 日期 备注 0.1 loon 2018.11.12 初稿 目录 文章目录 Qt菜单栏.工具栏.状态栏介绍 ...

  7. 【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

    在QMainWidget基础上实现菜单栏.工具栏.状态栏.右键菜单. 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> ...

  8. Qt学习三 - 菜单栏、工具栏、状态栏

    MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi( ...

  9. Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

    目录 1.菜单栏 1.1.Qt Creator创建菜单栏 1.2. 菜单栏类创建菜单栏 2.工具栏 2.1.Qt Creator创建工具栏 2.2. 工具栏类创建工具栏 3.状态栏 在使用Qt Cre ...

最新文章

  1. java实时获取android网速_获取Android网速的另一种方法
  2. 懂了!VMware/KVM/Docker原来是这么回事儿
  3. 程序员面试题精选100题(17)-把字符串转换成整数[算法]
  4. hdu 2074 叠框
  5. 多进程减少多个文件的内存占用
  6. tfs文件系统之NS配置管理
  7. 中国国民休闲状况调查(2020)
  8. Java—File类详解及实践
  9. linux vi设置技巧,vi 技巧
  10. 十个程序员必备的网站_程序员必备网站之一:VisuAlgo
  11. Hive中元数据表的关系和如何在元数据中删除表
  12. r2d 小米路由器2_维修一台亮黄灯的R2D小米路由器2
  13. hadoop 启动 报running beyond virtual memory错误的解决
  14. Minecraft在安卓手机上搭建java服务器
  15. dr.fone使用教程:如何修复iOS
  16. 基于SOLIDWORKS Simulation 实现对零件,装配体的静应力分析 ૮ ฅ‘ㅅ‘ฅ ა
  17. 单声道数据转双声道_单声道转双声道方法
  18. springboot瘦身打包
  19. 容器PaaS资源导航
  20. 计算机数据防泄露,防勒索病毒分案分析

热门文章

  1. 【网络转载】Sybase数据库基础知识
  2. strcmp与strncmp的区别
  3. java集合类(List+泛型)
  4. 科普:小鸟云负载均衡是什么?有什么用?
  5. C#HttpHelper官方产品发布与源码下载---苏飞版
  6. Python repr() 函数 基本含义及用法
  7. 微服务的链路追踪和流量可视化-钉钉告警
  8. 串口协议(1-Wire)解析
  9. 制作自己的Linux系统与启动光盘(2)
  10. 安装MSYS详细过程