《QT实用小工具·六十八》基于QMenu开发的炫酷菜单栏

1、概述
源码放在文章末尾

该项目基于QMenu实现了炫酷的菜单栏效果,包含了如下功能:

1、实现了类似word菜单栏的效果,可以在菜单栏中横向添加不同的菜单

2、鼠标点击菜单可以展开菜单栏,再次点击菜单可以收起菜单栏

3、鼠标点击笑脸可以切换菜单栏的背景颜色

项目demo演示如下所示:

使用方式:

1、创建菜单栏对象

cpp 复制代码
MenuBarPlugin* menuPlugin = new MenuBar();

2、在QMainWindow上设置菜单栏

cpp 复制代码
menuPlugin->SetMenuBar(this); //this为继承QMainWindow的界面指针

项目部分代码如下所示:

cpp 复制代码
#pragma once

#include <QMenuBar>
#include "ui_MenuWidget.h"
#include <QMouseEvent>
#include <QEvent>
#include <QTabWidget>
#include <QPaintEvent>

class QMainWindow;
class QMouseEvent;
class QEvent;

struct QRibbonPrivate;

class MenuWidget : public QMenuBar
{
	Q_OBJECT

public:
	MenuWidget(QWidget *parent = nullptr);
	~MenuWidget();

public:
    void install(QMainWindow* window);

    void setColor(const QString& colorName);

public:

    /**
     * 安装本实例至QMainWindow实例,
     * 自动根据QMainWindow的菜单栏创建Ribbon内容
     */
    void initialize(QMainWindow* window);

    /**
     * 卸载
     * TBD
     */
    void uninstall();

    void setStyleButtonVisible(bool visible);

public slots:

    /**
     * 设置标题
     */
    void setWindowTitle(const QString& title);

    /**
     * 切换全屏
     */
    void toggleMaximized();

private slots:

    /**
     * 展开标签页
     */
    void expandTab();

    /**
     * 隐藏标签页
     */
    void hideTab();

    /**
     * 隐藏标签页动画结束
     */
    void onHideTabFinished();

    /**
     * 标签页变化
     */
    void onTabChanged();

    /**
     * 失去焦点时
     */
    void onLostFocus();

    /**
     * tab被点击
     */
    void clickTab();

public slots:
    void on_pushButtonMaxTab_clicked();
    void on_pushButtonMinTab_clicked();

    void showTabWidgetPage(QTabWidget* tabWidget);
protected:
    void mousePressEvent(QMouseEvent* event) override;
    void mouseMoveEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
    void mouseDoubleClickEvent(QMouseEvent* event) override;
   // bool eventFilter(QObject* tgt, QEvent* e) override;
    void paintEvent(QPaintEvent* event) override;

private:
    void initStyle();
    void initWindowPage();
private:
	Ui::MenuWidgetClass ui;

    friend struct QRibbonPrivate;
    QRibbonPrivate* _ribbon;

    QMenu* _styleMenu;

    bool   m_bExpandStaus;

    bool isMaxWindow;
};

源码下载

相关推荐
Quz1 小时前
QML TreeView:排序与搜索过滤
qt
zhanghaha13142 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
Quz2 小时前
QML TreeView:基础树视图与自定义委托
qt
释厄6232 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
UIU1143 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller3 小时前
static
开发语言·c++
Junfeng的技术笔记8 小时前
基于 C++/Qt 的雷达回波信号检测与测距仿真系统
qt
Quz8 小时前
QML TableView:自定义样式与排序表格
qt
Quz8 小时前
QML TableView:可编辑表格与 SQLite 数据持久化
qt·sqlite
Quz8 小时前
QML ListView:C++ 数据模型与 ProxyModel 实时过滤
qt