Qt5.12实战之菜单栏工具栏与状态栏使用
演示效果:
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实战之菜单栏工具栏与状态栏使用相关推荐
- Linux kubuntu x64系统下解决QT5.12编辑菜单和工具栏不显示图标问题
Linux kubuntu x64系统下发现QT5.12在设计视图下编辑菜单和工具栏显示图标,但是编译运行后发现菜单和工具栏不显示图标,如下图: 我的解决办法是: 1.在QT项目中,菜单和工具栏图标一 ...
- 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow
1. 窗口应用布局样式及组成 PC端软件,最基本的一个窗口应用布局样式,如下: 大体可分为菜单栏.工具栏.状态栏.核心窗口.浮动窗口,使用时按需相互组合. 2. Qt中调用这些控件 1)新建一个工程: ...
- python界面不同按钮实现不同功能-三、PyQt5不同方法创建菜单栏、工具栏和状态栏...
创建菜单栏.工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现.通过两种方法的学习可以加深理解,更好的掌握PyQt5. 一.菜单栏与状态栏 状态栏的设置比较简单, ...
- 在Windows应用程序中设计菜单栏、工具栏和状态栏
1.5.2 在Windows应用程序中设计菜单栏.工具栏和状态栏 1.菜单栏的设计 在Windows应用程序中制作菜单栏时,可以使用MenuStrip控件.使用MenuStrip控件可以将菜单设计成 ...
- Qt菜单栏、工具栏和状态栏
Qt 将用户与界面进行交互的元素抽象为一种 "动作",使用 QAction 类表示.QAction 可以添加到菜单上.工具栏上.期间,我们还详细介绍了一些细节问题,比如资源文件的使 ...
- Qt菜单栏、工具栏、状态栏介绍及工具栏action的动态增删显示实现方式
Qt菜单栏.工具栏.状态栏介绍及工具栏action的动态增删显示实现方式 版本说明 版本 作者 日期 备注 0.1 loon 2018.11.12 初稿 目录 文章目录 Qt菜单栏.工具栏.状态栏介绍 ...
- 【Qt】菜单栏、工具栏、状态栏、右键菜单的实现
在QMainWidget基础上实现菜单栏.工具栏.状态栏.右键菜单. 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> ...
- Qt学习三 - 菜单栏、工具栏、状态栏
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi( ...
- Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)
目录 1.菜单栏 1.1.Qt Creator创建菜单栏 1.2. 菜单栏类创建菜单栏 2.工具栏 2.1.Qt Creator创建工具栏 2.2. 工具栏类创建工具栏 3.状态栏 在使用Qt Cre ...
最新文章
- java实时获取android网速_获取Android网速的另一种方法
- 懂了!VMware/KVM/Docker原来是这么回事儿
- 程序员面试题精选100题(17)-把字符串转换成整数[算法]
- hdu 2074 叠框
- 多进程减少多个文件的内存占用
- tfs文件系统之NS配置管理
- 中国国民休闲状况调查(2020)
- Java—File类详解及实践
- linux vi设置技巧,vi 技巧
- 十个程序员必备的网站_程序员必备网站之一:VisuAlgo
- Hive中元数据表的关系和如何在元数据中删除表
- r2d 小米路由器2_维修一台亮黄灯的R2D小米路由器2
- hadoop 启动 报running beyond virtual memory错误的解决
- Minecraft在安卓手机上搭建java服务器
- dr.fone使用教程:如何修复iOS
- 基于SOLIDWORKS Simulation 实现对零件,装配体的静应力分析 ૮ ฅ‘ㅅ‘ฅ ა
- 单声道数据转双声道_单声道转双声道方法
- springboot瘦身打包
- 容器PaaS资源导航
- 计算机数据防泄露,防勒索病毒分案分析