当前位置: 首页 > news >正文

一级域名 网站建设百度手机

一级域名 网站建设,百度手机,化工网站开发,什么外贸网站做箱包好目的 端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思…

目的

端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思路。

效果

先看下动态效果:

菜单栏动态添加动作到工具栏

介绍

首先,说下菜单栏,工具栏和状态栏区别:

  • 菜单栏:一般在窗体标题的下方,有下拉选项,和可有多级子菜单。
  • 工具栏:一般在菜单栏下方,可上下左右四个方向调整位置,默认在菜单栏下方(即上方向),方便操作,直接点击即可触发想要的工作。
  • 状态栏:一般在窗体最下方,用于永久或者暂时显示某些状态信息等。

UI如下图所示:
在这里插入图片描述

Qt之QMenuBar(菜单栏)、QToolBar(工具栏)、QStatusBar(状态栏)操作说明

可在帮助里,选择索引,输入想查找的类,比如qmenubar,一般选择第一个结果(可根据需要选择其他),会弹出选择主题,选择库版本,会跳到对应的类介绍页
在这里插入图片描述
点击More...,会跳到Detailed Description,查看此类详细介绍,或者点击Public Functions查看此类公有成员方法。

QMenuBar(菜单栏)

在这里插入图片描述

QStatusBar(状态栏)

在这里插入图片描述

QToolBar(工具栏)

在这里插入图片描述
在这里插入图片描述

菜单栏对工具栏进行动作动态配置的实现思路

  1. 首先,菜单栏的子菜单和动作是已知并存在的
  2. 动作设置为可选择的
  3. 当点击动作时,触发triggered(bool checked)信号
  4. 绑定槽,然后根据checked状态,进行工具栏动态创建动作或者移除动作
  5. 当点击工具栏动作时,触发动作实际功能

示例

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QToolBar>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:void setAction(QToolBar* pTB, QAction* pActSender, bool checked);private slots:void on_actionact11_triggered(bool checked);void on_actionact12_triggered(bool checked);void on_actionact21_triggered(bool checked);void on_actionact22_triggered(bool checked);void on_actionact31_triggered(bool checked);void on_actionact32_triggered(bool checked);void on_actionact33_triggered(bool checked);private:Ui::MainWindow *ui;QToolBar*       m_pTB1;QToolBar*       m_pTB2;QToolBar*       m_pTB3;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pTB1 = new QToolBar("tb1");m_pTB2 = new QToolBar("tb2");m_pTB3 = new QToolBar("tb3");addToolBar(m_pTB1);addToolBar(m_pTB2);addToolBar(m_pTB3);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::setAction(QToolBar *pTB, QAction *pActSender, bool checked)
{if(checked){foreach (QAction* pAct, pTB->actions()) {if(pAct->text().compare(pActSender->text()) == 0){return;}}QAction* pActClone = new QAction(pActSender->text(), this);connect(pActClone, &QAction::triggered, this, [this, pActClone](){ui->statusBar->showMessage(QString("我是 %1").arg(pActClone->text()), 2000);QMessageBox::information(this, "提示", QString("我是 %1").arg(pActClone->text()));});pTB->insertAction(0, pActClone);}else {foreach (QAction* pAct, pTB->actions()) {if(pAct->text().compare(pActSender->text()) == 0){pTB->removeAction(pAct);return;}}}
}void MainWindow::on_actionact11_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB1, pActSender, checked);
}void MainWindow::on_actionact12_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB1, pActSender, checked);
}void MainWindow::on_actionact21_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB2, pActSender, checked);
}void MainWindow::on_actionact22_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB2, pActSender, checked);
}void MainWindow::on_actionact31_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB3, pActSender, checked);
}void MainWindow::on_actionact32_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB3, pActSender, checked);
}void MainWindow::on_actionact33_triggered(bool checked)
{QAction* pActSender = dynamic_cast<QAction*>(sender());setAction(m_pTB3, pActSender, checked);
}

ui

	// ui的话,主要是添加一些菜单和动作,工具栏是代码实现的// 动作名称

在这里插入图片描述

main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

分析

以上示例,主要函数为:

private:void setAction(QToolBar* pTB, QAction* pActSender, bool checked);
void MainWindow::setAction(QToolBar *pTB, QAction *pActSender, bool checked)
{if(checked){foreach (QAction* pAct, pTB->actions()) {if(pAct->text().compare(pActSender->text()) == 0){return;}}QAction* pActClone = new QAction(pActSender->text(), this);connect(pActClone, &QAction::triggered, this, [this, pActClone](){ui->statusBar->showMessage(QString("我是 %1").arg(pActClone->text()), 2000);QMessageBox::information(this, "提示", QString("我是 %1").arg(pActClone->text()));});pTB->insertAction(0, pActClone);}else {foreach (QAction* pAct, pTB->actions()) {if(pAct->text().compare(pActSender->text()) == 0){pTB->removeAction(pAct);return;}}}
}

根据传入的参数,进行工具栏动态的创建。
此外:

ui->statusBar->showMessage(QString("我是 %1").arg(pActClone->text()), 2000);

上述代码是 暂时显示文本,时间是2000ms,之后会消失。

结论

学以致用。

http://www.hkea.cn/news/989929/

相关文章:

  • 深圳市工程建设交易服务中心网站软文什么意思
  • 大型网架加工厂成都网站建设方案优化
  • 导航网站的广告怎么做的千锋教育官方网
  • etc网站开发票网站制作软件免费下载
  • 上海seo网站设计2022十大网络营销案例
  • 还有做网站的必要吗网站运营推广方案
  • 企业营销型网站建设厂家品牌搜索引擎服务优化
  • 学校网站建设计划怎么成为百度推广代理商
  • 普陀网站开发培训学校seo快速优化
  • 建一个商城网站多少钱免费的网站推广软件
  • 手机网站解决方案看网站搜什么关键词
  • 顺企网江西网站建设宜昌今日头条新闻
  • 坪山网站建设行业现状网页设计与制作代码成品
  • 网站建设需求文档模板下载学大教育一对一收费价格表
  • 小型网站怎样优化百度首页官网
  • 网站开发与iso9001关系百度上做推广怎么做
  • wordpress怎么设置导航镇江seo
  • 番禺建设网站服务软文写作网站
  • 有哪些专做自然风景图片的网站石首seo排名
  • 移动网站虚拟主机seo 排名 优化
  • 专业网站建设课程网站推广优化方式
  • 适合站长做的网站信息流广告投放工作内容
  • 做健身网站步骤网站建设网络公司
  • 武汉整站seo数据上云网站关键词优化怎么做的
  • 网站尾部网络seo推广
  • 建设一个公司网站需要什么知识网站网络推广优化
  • 政府高度重视网站建设怎么做网络推广
  • 自己做的网站是怎么赚钱免费ip地址网站
  • 郑州市政府网站集约化建设计划企业seo排名外包
  • 什么网站可以免费做护师题企业网站管理系统源码