一个menu的样式是由其上边的菜单项决定的,所以要个性化定制菜单,其实就是要个性化定制各个菜单项。在Qt中菜单项是QAction类,但是如果直接用它的话:其样式是由系统所决定的,我们只能在上边写一些字符或者再加一个Icon.
但是有时候我们需要定制一个个性化的menu。比如:你的App整体风格为蓝色调,但是在Qt for symbian上系统菜单项却是黑色的,Qt for Windows是灰色的,显然这样就不搭配了,所以这才需要我们去个性化它。
个性化的最简单方式就是给菜单项上边刷一张图片。欲达到的效果为:
1:当鼠标hover移动进入该菜单项区域时:其应变成另外一张背景图片。
2:当鼠标hover移出该菜单选项时:其恢复原先的背景图片。
3:当mousePress时:换成另一张图片.
4:当mouseRelease时:换回原先的背景图片,并且隐藏菜单本身。
由上分析可知:个性化定制一个菜单项时:至少要准备两张图片,一张用于平时状态,一种用于hover-in和mouse-press状态。
---------------------------------------------------------------------------------------------------------------------------------
对标准的菜单项控件QAction,由于其并 非继承于QWidget,所以我们无法再上边绘制image。只能调用它自身的函数来摆个icon和写点字符,这显然达不到我们的要求。
为了实现个性话定制菜单项,Qt提供了另外一个类:QWidgetAction。
亦即:普通的菜单项我们可以用QAction实现.希望个性化定制的菜单项我们是用QWidgetAction来实现。
而它实现个性化定制的方法是:它本身可以充当一个中间“容器”,从而在其上摆一个普通的QWidget,这样显示在用户面前的就是这个其上的widget。对于这个widget而言:我们完全可以自由定制,从而间接表现出对菜单项的定制。
由上知:我们所谓的个性化定制其实就是在先创建一个指定样式的QWidget对象;而后将其放到QWidgetAction上;最后将创建好的QWidgetAction对象放到菜单面板中!!
------------------------------------------------------------------------------------------------------------------------
那么:照上边所说,这里还有一个问题需要解决:那就是其上边这个普通widget的parent父亲是谁?我们不可能将其指定为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);该函数的传入参数就是:这个QWidgetAction的parent ,它是由系统传入的,我们不需要去管它。
---------------------------------------------------------------------------------------------------------------------------
总的主体流程就是:
1:首先派生QWidgetAction,在其内创建一个定制好的普通widget(注意此widget是没有指定父对象的)
2:重写createWidget()函数,将其父窗口指定为该菜单项所在的容器窗口,亦即:传入的指针。
而后所做的无非是重写一下mouse事件 和hover事件,来实现上边所说的图片变换,这里就不复述了。
(我资源里边上传了一个例子,其中的类我已经封装好了,可以直接拿出来使用,有兴趣的话可以下载来看看,顺摆送我1个积分,呵呵~也可以给我发邮件,我24小时之内绝对发给你, E-mail: jason-dou@hotmail.com)
分享到:
相关推荐
我一篇博文里边介绍的如何创建Qt个性化菜单里的例子程序: 博文地址:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/11/5580302.aspx 里边创建个性化菜单项的两个类已经封装好,可以直接拿来使用。
在本文中,我们将深入探讨如何使用Qt框架来实现一个个性化的系统托盘,这个系统托盘的设计灵感来源于电脑管家的风格。尽管我们无法提供与电脑管家完全相同的图标,但通过Qt提供的API,我们可以创建出非常接近的功能...
综上所述,PyQt中的个性化菜单制作涉及了QWidgetAction的使用,以提供更丰富的用户交互,同时结合鼠标事件处理和信号槽机制,可以实现各种定制化的菜单行为。通过正确地连接和配置这些元素,开发者能够创建出满足...
在QT中自定义菜单模块是实现应用个性化和功能扩展的重要方式之一。本文将深入探讨如何在QT中构建自己的菜单模块,并采用单例模式进行管理。 首先,我们要理解菜单模块在QT中的作用。菜单模块通常包含主菜单栏,其中...
在本文中,我们将深入探讨如何使用Qt框架来创建一个仿360安全卫士界面,特别是专注于自定义标题栏的设计。Qt是一个跨平台的应用程序开发框架,广泛应用于GUI(图形用户界面)编程,支持多种操作系统,如Windows、...
在"QT 扁平化自定义风格界面TabWidget为核心"的主题中,我们将深入探讨如何利用QT框架创建一个扁平化的界面,这种风格通常与移动应用的设计趋势相吻合,既简洁又时尚。 首先,`mainwindow.cpp`和`mainwindow.h`是主...
通过`addMenu()`、`addAction()`等方法,可以构建出复杂而个性化的菜单结构。 4. **窗口自由移动**:在Qt中,通常使用`QWidget`或`QMainWindow`的默认行为来实现窗口的移动。但为了实现更灵活的移动效果,如只在...
Qt做的系统托盘图标,仿360安全卫士,QQ管家,比较适合初学者学习使用。
在VC++编程中,创建个性化的弹出菜单是一项常见的任务,尤其在用户界面(UI)设计中,这样的功能能够显著提升用户体验。"vc++个性化的弹出菜单"这一主题主要涉及以下知识点: 1. **菜单资源**:在VC++中,菜单通常...
在Qt编程中,系统托盘(System Tray)是应用程序与用户交互的一种重要方式,尤其是在桌面应用中,当主窗口被最小化或者...在实际项目中,还可以根据需求自定义更复杂的菜单结构和消息内容,以满足用户的个性化需求。
7. **自定义翻译**: 如果官方提供的翻译不满意,开发者可以使用Qt Linguist工具创建自定义的翻译文件,覆盖原有的翻译,满足个性化需求。 8. **国际化(i18n)和本地化(l10n)**: 这个过程涉及将软件设计为可适应不同...
也能够显示为菜单模式,并且能够在系统任务栏中具备显示和右键菜单功能,可以说此设计是满足任何中小型项目的顶层设计的,对于大型项目也可以在此基础上继续进行扩展设计,具备十足的个性化设计控件,可简单嵌套于...
总之,通过Qt结合Windows API,我们可以创建一个自定义的"SendTo"菜单,提供给用户更多个性化的选项。这个过程涉及到Windows Shell扩展的实现,包括注册COM组件、实现相关接口以及与Qt的交互。这个知识点对于开发...
同时,对于UI布局和样式的设计,Qt的QSS(Qt StyleSheet)语言可以用来实现个性化定制。 总的来说,这个源码实例展示了如何利用Qt库创建一个功能丰富的系统托盘应用,包括弹出通知和右键菜单,以及动画效果的添加,...
在本文中,我们将深入探讨如何使用Qt框架自定义...通过理解并实现这些关键点,开发者可以创建出具有高度定制性和交互性的可视化工具,适应各种图形需求。在实际开发中,还需要考虑性能优化、错误处理和用户友好的设计。
2、能够根据用户的本地设置来选择语言,提供个性化的用户体验。 3、能够动态切换语言,满足不同语言用户的需求。 Qt 程序国际化的应用场景: 1、跨语言应用程序,例如翻译软件、语言学习软件等。 2、多语言支持...
QT库是Qt公司开发的一款强大的跨平台应用程序开发框架,它为开发者提供了丰富的API,使得创建图形用户界面(GUI)变得简单高效。...在实际项目中,开发者可以根据需求灵活运用这些接口,实现个性化和功能化的菜单系统。
这个教程将探讨如何利用Qt的样式表(QSS,Qt Style Sheets)来自定义`QComboBox`的外观,使你的应用程序界面更加美观和个性化。通过自定义样式表,我们可以改变控件的颜色、字体、边框等视觉元素。 首先,让我们...
通过QSS,我们可以改变按钮的颜色、形状、边框、字体、大小、鼠标状态下的样式等多种视觉属性,使得按钮的设计更加个性化。 在该项目中,用户可以选择不同的样式选项,如背景渐变、边框风格、字体和字号、以及鼠标...
2. `Tnotepad.v12.suo`:这是Visual Studio的用户选项文件,存储了用户的个性化设置,如断点、窗口布局等。这个文件通常不需手动修改。 3. `Win32`:这可能是一个目录,包含了针对32位操作系统的特定资源或编译输出...