`
tubaluer
  • 浏览: 1500026 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

Qt中如何定制个性化菜单

 
阅读更多

一个menu的样式是由其上边的菜单项决定的,所以要个性化定制菜单,其实就是要个性化定制各个菜单项。在Qt中菜单项是QAction类,但是如果直接用它的话:其样式是由系统所决定的,我们只能在上边写一些字符或者再加一个Icon.

但是有时候我们需要定制一个个性化的menu。比如:你的App整体风格为蓝色调,但是在Qt for symbian上系统菜单项却是黑色的,Qt for Windows是灰色的,显然这样就不搭配了,所以这才需要我们去个性化它。

个性化的最简单方式就是给菜单项上边刷一张图片。欲达到的效果为:

1:当鼠标hover移动进入该菜单项区域时:其应变成另外一张背景图片。

2:当鼠标hover移出该菜单选项时:其恢复原先的背景图片。

3:当mousePress时:换成另一张图片.

4:当mouseRelease时:换回原先的背景图片,并且隐藏菜单本身。

由上分析可知:个性化定制一个菜单项时:至少要准备两张图片,一张用于平时状态,一种用于hover-inmouse-press状态。

---------------------------------------------------------------------------------------------------------------------------------

对标准的菜单项控件QAction,由于其并 非继承于QWidget,所以我们无法再上边绘制image。只能调用它自身的函数来摆个icon和写点字符,这显然达不到我们的要求。

为了实现个性话定制菜单项,Qt提供了另外一个类:QWidgetAction

亦即:普通的菜单项我们可以用QAction实现.希望个性化定制的菜单项我们是用QWidgetAction来实现。

而它实现个性化定制的方法是:它本身可以充当一个中间“容器”,从而在其上摆一个普通的QWidget,这样显示在用户面前的就是这个其上的widget。对于这个widget而言:我们完全可以自由定制,从而间接表现出对菜单项的定制。

由上知:我们所谓的个性化定制其实就是在先创建一个指定样式的QWidget对象;而后将其放到QWidgetAction上;最后将创建好的QWidgetAction对象放到菜单面板中!!

------------------------------------------------------------------------------------------------------------------------

那么:照上边所说,这里还有一个问题需要解决:那就是其上边这个普通widgetparent父亲是谁?我们不可能将其指定为QWidgetAction,毕竟它并不继承于QWidget,无法作为parent

其实这个普通窗口的父窗口我们是直接指定为:存放这个菜单项的菜单QMenu 以为QMenu是继承自QWidget,可以当做parent

具体实现上:

:对于QWidgetAction而言,我们要派生重写其成员函数:

QWidget* createWidget(QWidget*);

帮助文档上如此解释:

This function is called whenever the action is added to a container widget that supports custom widgets

亦即:当我们将个性化的菜单项加到容器窗口中时就会立即调用该函数。

而该函数的作用就是:把创建好的放于其上的普通widget父窗口设置为该菜单项所在的容器窗口(QMenu);该函数的传入参数就是:这个QWidgetActionparent ,它是由系统传入的,我们不需要去管它。

---------------------------------------------------------------------------------------------------------------------------

总的主体流程就是:

1:首先派生QWidgetAction,在其内创建一个定制好的普通widget(注意此widget是没有指定父对象的)

2:重写createWidget()函数,将其父窗口指定为该菜单项所在的容器窗口,亦即:传入的指针。


而后所做的无非是重写一下mouse事件 hover事件,来实现上边所说的图片变换,这里就不复述了。

(我资源里边上传了一个例子,其中的类我已经封装好了,可以直接拿出来使用,有兴趣的话可以下载来看看,顺摆送我1个积分,呵呵~也可以给我发邮件,我24小时之内绝对发给你, E-mail: jason-dou@hotmail.com)

分享到:
评论

相关推荐

    Qt个性化菜单项例子程序

    我一篇博文里边介绍的如何创建Qt个性化菜单里的例子程序: 博文地址:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/11/5580302.aspx 里边创建个性化菜单项的两个类已经封装好,可以直接拿来使用。

    Qt个性化系统托盘的实现

    在本文中,我们将深入探讨如何使用Qt框架来实现一个个性化的系统托盘,这个系统托盘的设计灵感来源于电脑管家的风格。尽管我们无法提供与电脑管家完全相同的图标,但通过Qt提供的API,我们可以创建出非常接近的功能...

    pyqt制作的个性化菜单

    综上所述,PyQt中的个性化菜单制作涉及了QWidgetAction的使用,以提供更丰富的用户交互,同时结合鼠标事件处理和信号槽机制,可以实现各种定制化的菜单行为。通过正确地连接和配置这些元素,开发者能够创建出满足...

    QT 自己写菜单模块

    在QT中自定义菜单模块是实现应用个性化和功能扩展的重要方式之一。本文将深入探讨如何在QT中构建自己的菜单模块,并采用单例模式进行管理。 首先,我们要理解菜单模块在QT中的作用。菜单模块通常包含主菜单栏,其中...

    【Qt】仿360安全卫士界面(自定义标题栏).rar

    在本文中,我们将深入探讨如何使用Qt框架来创建一个仿360安全卫士界面,特别是专注于自定义标题栏的设计。Qt是一个跨平台的应用程序开发框架,广泛应用于GUI(图形用户界面)编程,支持多种操作系统,如Windows、...

    QT 扁平化自定义风格界面TabWidget为核心

    在"QT 扁平化自定义风格界面TabWidget为核心"的主题中,我们将深入探讨如何利用QT框架创建一个扁平化的界面,这种风格通常与移动应用的设计趋势相吻合,既简洁又时尚。 首先,`mainwindow.cpp`和`mainwindow.h`是主...

    QT样式(包含:系统托盘,独立标题栏,自定义菜单,窗口自由移动,样式效果)

    通过`addMenu()`、`addAction()`等方法,可以构建出复杂而个性化的菜单结构。 4. **窗口自由移动**:在Qt中,通常使用`QWidget`或`QMainWindow`的默认行为来实现窗口的移动。但为了实现更灵活的移动效果,如只在...

    Qt做的系统托盘图标,仿360安全卫士,QQ管家

    Qt做的系统托盘图标,仿360安全卫士,QQ管家,比较适合初学者学习使用。

    vc++个性化的弹出菜单

    在VC++编程中,创建个性化的弹出菜单是一项常见的任务,尤其在用户界面(UI)设计中,这样的功能能够显著提升用户体验。"vc++个性化的弹出菜单"这一主题主要涉及以下知识点: 1. **菜单资源**:在VC++中,菜单通常...

    Qt 实现系统托盘,托盘菜单,托盘消息.zip

    在Qt编程中,系统托盘(System Tray)是应用程序与用户交互的一种重要方式,尤其是在桌面应用中,当主窗口被最小化或者...在实际项目中,还可以根据需求自定义更复杂的菜单结构和消息内容,以满足用户的个性化需求。

    qtcreator中文包

    7. **自定义翻译**: 如果官方提供的翻译不满意,开发者可以使用Qt Linguist工具创建自定义的翻译文件,覆盖原有的翻译,满足个性化需求。 8. **国际化(i18n)和本地化(l10n)**: 这个过程涉及将软件设计为可适应不同...

    QT-顶层菜单设计,类360精灵球,扩展四个顶层功能菜单页面,具备丝滑动画设计,个性化十足

    也能够显示为菜单模式,并且能够在系统任务栏中具备显示和右键菜单功能,可以说此设计是满足任何中小型项目的顶层设计的,对于大型项目也可以在此基础上继续进行扩展设计,具备十足的个性化设计控件,可简单嵌套于...

    Qt实现Windows的SendTo菜单

    总之,通过Qt结合Windows API,我们可以创建一个自定义的"SendTo"菜单,提供给用户更多个性化的选项。这个过程涉及到Windows Shell扩展的实现,包括注册COM组件、实现相关接口以及与Qt的交互。这个知识点对于开发...

    Qt右下角弹出框源码 系统托盘并带右键菜单

    同时,对于UI布局和样式的设计,Qt的QSS(Qt StyleSheet)语言可以用来实现个性化定制。 总的来说,这个源码实例展示了如何利用Qt库创建一个功能丰富的系统托盘应用,包括弹出通知和右键菜单,以及动画效果的添加,...

    Qt自定义动态折线图绘制

    在本文中,我们将深入探讨如何使用Qt框架自定义...通过理解并实现这些关键点,开发者可以创建出具有高度定制性和交互性的可视化工具,适应各种图形需求。在实际开发中,还需要考虑性能优化、错误处理和用户友好的设计。

    Qt程序国际化(简单实用)

    2、能够根据用户的本地设置来选择语言,提供个性化的用户体验。 3、能够动态切换语言,满足不同语言用户的需求。 Qt 程序国际化的应用场景: 1、跨语言应用程序,例如翻译软件、语言学习软件等。 2、多语言支持...

    QT菜单QMenuBar接口介绍.7z

    QT库是Qt公司开发的一款强大的跨平台应用程序开发框架,它为开发者提供了丰富的API,使得创建图形用户界面(GUI)变得简单高效。...在实际项目中,开发者可以根据需求灵活运用这些接口,实现个性化和功能化的菜单系统。

    Qt CombBox下拉列表自定义(使用样式表)

    这个教程将探讨如何利用Qt的样式表(QSS,Qt Style Sheets)来自定义`QComboBox`的外观,使你的应用程序界面更加美观和个性化。通过自定义样式表,我们可以改变控件的颜色、字体、边框等视觉元素。 首先,让我们...

    Qt 自定义QPushButton样式表(实时生成QSS)

    通过QSS,我们可以改变按钮的颜色、形状、边框、字体、大小、鼠标状态下的样式等多种视觉属性,使得按钮的设计更加个性化。 在该项目中,用户可以选择不同的样式选项,如背景渐变、边框风格、字体和字号、以及鼠标...

    qt版简易记事本

    2. `Tnotepad.v12.suo`:这是Visual Studio的用户选项文件,存储了用户的个性化设置,如断点、窗口布局等。这个文件通常不需手动修改。 3. `Win32`:这可能是一个目录,包含了针对32位操作系统的特定资源或编译输出...

Global site tag (gtag.js) - Google Analytics