一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种模糊控件创建方法、装置与计算设备与流程

2022-07-16 23:33:35 来源:中国专利 TAG:


1.本发明涉及控件的窗口内模糊技术领域,尤其是一种窗口内模糊的控件创建方法、装置与计算设备。


背景技术:

2.软件的界面(user interface design,ui)设计是软件竞争的焦点技术之一。相对于普通窗口(如图1所示)来说,拥有模糊特效的窗口(如图2所示)更加受到用户的喜爱,这一点在windows和mac两款操作系统上亦有所体现。在使用qt(qt是一种跨平台c 图形用户界面应用程序开发框架)作为界面库时,可以使用qt支持的接口来达到窗口内模糊的效果。图形效果是qt4.6添加的一个新的特点功能,图形效果(qgraphicseffect)类是全部图形效果的基类。图形效果能够实施在任何一个图形项或者非顶层窗口的任何窗口部件上,只需先建立一个图形效果对象,而后调用setgraphicseffect()函数来使用这个图形效果便可。
3.在qt中,绘制模糊图形的过程如图3所示:控件(widget)接收到刷新事件后,利用qwidgetprivate类从后台存储(backingstore)准备相关绘制数据并开始绘制,如果不需要绘制模糊效果,则利用私有类(qwidgetprivate)类发送需要绘制上述widget的事件(qpaintpevent),在存在子widget的情况下,利用qwidgetprivate类绘制子widget,如果不存在子widget,则绘制结束;如果需要绘制模糊效果,则利用图形模糊效果(qgraphicsblureffect)类进行模糊效果绘制,绘制过程为:首先利用qpixmapblurfilter类获得图形效果尺寸及位置,然后用模糊算法进行处理,最后利用绘图工具(qpainter)将模糊效果绘制到上述widget,完成绘制。每次qwidget(qwidget指代qt应用程序中所有用户界面对象的基类)绘制设备重新绘制时,都会判断是否含有模糊图形效果,若有则调用模糊图形效果类的draw()函数进行绘制。上述过程中,qgraphicsblureffect的结构如图4所示。qgraphicsblureffect继承于qgraphicseffect,qgraphicseffect继承于qt对象的基类qobject,qgraphicsblureffect能够重新实现draw()函数,将需要绘制的原始位图绘制在qpixmap中,qpixmap类是一种离屏图像表示形式,使用模糊算法对qpixmap进行模糊处理,将模糊处理后的qpixmap绘制到上述qwidget绘制设备上。
4.如果一个控件上设置了qgraphicsblureffect,那么该控件上的子控件都会模糊,因为现有技术在设计上会递归地将所有子控件都应用图形效果,如图5所示。若要排除部分子控件被应用模糊效果,只能改变控件之间的关系,例如将控件放置在模糊窗口的父级窗口上,来达到控件周围模糊效果的方案。
5.综上,上述现有的窗口内模糊技术在不改变控件树关系的情况下无法做到只对某一个控件实现模糊效果的问题。


技术实现要素:

6.为此,本发明提供了一种模糊控件创建方法、装置与计算设备,以力图解决或者至
少缓解上面存在的至少一个问题。
7.根据本发明的一个方面,提供了一种模糊控件创建方法,所述模糊控件创建方法包括步骤:响应于控件创建请求,创建控件,并将所述控件的控件面板设置为透明;获取所述控件面板的原始绘制数据;通过模糊效果控件类对所述原始绘制数据进行模糊处理,得到模糊后的图像;以及将所述模糊后的图像绘制到所述控件面板上,以完成模糊控件的创建。
8.可选地,在根据本发明的模糊控件创建方法中,所述模糊效果控件类包括若干个图形效果函数接口。
9.可选地,在根据本发明的模糊控件创建方法中,所述模糊效果控件类还包括模糊区域设置函数。
10.可选地,在根据本发明的模糊控件创建方法中,所述获取所述控件面板的原始绘制数据的步骤包括:获取所述控件面板的原始背景图像;以及对所述原始背景图像进行裁剪,得到特定区域的原始绘制数据。
11.可选地,在根据本发明的模糊控件创建方法中,所述原始背景图像通过窗口绘制函数来获取。
12.可选地,在根据本发明的模糊控件创建方法中,在所述将所述模糊后的图像绘制到所述控件面板上的步骤之后,所述模糊控件创建方法还包括步骤:按照用户设置的掩码参数对所述控件面板上的图像进行处理,并将处理结果绘制到所述控件面板上。
13.根据本发明的另一方面,还提供了一种模糊控件创建装置,包括:控件创建单元,适于响应于控件创建请求,创建控件,并将所述控件的控件面板设置为透明;数据获取单元,适于获取所述控件面板的原始绘制数据;模糊单元,适于通过模糊效果控件类对所述原始绘制数据进行模糊处理,得到模糊后的图像;以及绘制单元,适于将所述模糊后的图像绘制到所述控件面板上,以完成模糊控件的创建。
14.可选地,在根据本发明的模糊控件创建装置中,所述模糊效果控件类包括若干个图形效果函数接口。
15.根据本发明的再一方面,还提供了一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当程序指令被处理器读取并执行时,使得计算设备执行如上的模糊控件创建方法。
16.根据本发明的又一方面,还提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上的模糊控件创建方法。
17.根据本发明的模糊控件创建方法、装置与计算设备,能够实现以下有益效果中的至少一种:能够在不改变原有控件树关系的基础上,达到图形模糊效果,所创建的控件可以像普通的qwidget一样插入到控件树的任意位置,达到模糊此控件背景的目的,而且不会改变其它任何qwidget的行为,对整个绘制系统无任何侵入性,有利于模糊效果功能的维护;只对当前创建的控件进行模糊效果处理,不影响其它控件的显示效果,并且遵循qt绘制系统,渲染性能有较大提升;用户可以指定模糊区域,模糊区域支持设置为任意形状,无需对qwidget绘制的内容进行二次加工,模糊性能有较大提升;还可以通过函数组合设置的方式得到多种图形效果的融合效果。
附图说明
18.为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
19.图1示出了根据本发明背景技术部分的无窗口内模糊效果的示意图;图2示出了根据本发明背景技术部分的窗口内模糊效果的示意图;图3示出了根据本发明背景技术部分的绘制模糊图形的流程图的示意图;图4示出了根据本发明背景技术部分的 qgraphicsblureffect的类图;图5示出了根据本发明背景技术部分的含有子控件的窗口内模糊效果的示意图;图6示出了根据本发明一个实施例的计算设备600的结构示意图;图7示出了根据本发明一个实施例的窗口内模糊的控件创建方法700的流程图;图8示出了根据本发明一个实施例的dblureffectwidget的类图;图9示出了根据本发明一个实施例的媒体播放器的播放栏的模糊效果图;图10示出了根据本发明一个实施例的模糊控件创建装置1000的结构示意图。
具体实施方式
20.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
21.现有窗口模糊技术在不改变控件树关系的情况下无法做到只对某个控件实现图形模糊效果。此外,qt官网上明确指出,qgraphicseffect存在设计缺陷,已经将其标记为废弃,之后不再维护,这使得控件只能设置一种图形效果,例如,需要一个控件上同时有阴影图形效果和着色图形效果,需要重新继承qgraphicseffect,写一个新的子类来达到这种组合效果,而不能在使用层面上做到两种效果的组合,因为在控件上应用一种图形效果的同时会清除上一种图形效果,这在扩展上有一定的阻碍。
22.针对现有技术的以上问题,本发明提供了一种窗口内模糊的控件创建方法,创建的控件可以插入到控件树的任意位置,并且能能够通过函数组合设置的方式得到多种图形效果的融合效果。
23.图6示出了根据本发明一个实施例的计算设备600的结构示意图。需要说明的是,图6所示的计算设备600仅为一个示例,在实践中,用于实施本发明的窗口内模糊的控件创建方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图6所示的计算设备600相同,也可以与图6所示的计算设备600不同。实践中用于实施本发明的窗口内模糊的控件创建方法的计算设备可以对图6所示的计算设备600的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制,本发明的窗口内模糊的控件创建方法在执行过程中可以动态地调用计算设备600中的各硬件组件。
24.如图6所示,计算设备600包括系统存储器610、处理器620以及显示设备630。
25.系统存储器610中存储用于执行窗口内模糊的控件创建方法700的多条程序指令,系统存储器610可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。处理器620可以是任何类型的处理,包括但不限于:微处理器(
µ
p)、微控制器(
µ
c)、数字信息处理器(dsp)或者它们的任何组合。用户创建具有窗口内模糊效果的控件时,处理器620读取系统存储器610中存储的程序指令并运行这些程序指令,然后将这些程序指令的运行结果(即具有窗口内模糊效果的控件)绘制出来并通过显示设备630进行显示。
26.根据本发明实施例的一种窗口内模糊的控件创建方法700包括步骤:响应于控件创建请求,创建控件,并将控件的控件面板设置为透明;获取控件面板的原始绘制数据;通过模糊效果控件类对原始绘制数据进行模糊处理,得到模糊后的图像;以及将模糊后的图像绘制到控件面板上,以完成模糊控件的创建。
27.图7示出了根据本发明一个实施例的窗口内模糊的控件创建方法700的流程图。方法700在计算设备(例如前述计算设备600)中执行,用于创建具有窗口内模糊效果的控件。如图7所示,方法700始于步骤s710。
28.在步骤s710中,响应于控件创建请求,创建控件,并将控件的控件面板设置为透明。在步骤s710中,用户可以根据实际需要在控件树的任意位置插入一个新的控件。
29.接下来,在步骤s720中,获取控件面板的原始绘制数据。
30.qwidget的绘制原理如下:当窗口大小发生改变时,绘制程序将先收到窗口系统发出的窗口大小改变的事件通知,事件分发器负责将事件派发到该窗口,该窗口收到窗口大小改变事件的通知后处理该事件,若需要重绘,则向绘制窗口渲染区域对应的绘制设备中进行绘制,绘制内容由widget决定,然后生成窗口绘制事件,事件按规则最终被派发到某个widget,进而该widget的绘制函数被调用,所有在绘制函数中产生的绘制数据都会绘制到绘制窗口渲染区域对应的绘制设备中,然后调用系统绘制接口,将其送入显存。因此,可以在窗口绘制函数中获得通过绘制窗口渲染区域获得widget的原始数据,例如位图数据,对其加工处理,再通过画笔绘制到widget中。
31.根据一种实现方式,可以采用如下方式获取控件面板的原始绘制数据:通过获得原始的绘制设备内的数据来获取控件面板的原始背景图像,例如,在widget绘制函数内,先通过绘制窗口渲染区域得到顶层的绘制区域,即主窗口(上述控件所属窗口的父级窗口)上控件对应区域内已经绘制的内容,此时获取到的内容为下层widget所绘制的内容,也即被上述控件遮挡住的内容,通常原始背景图像为位图;然后根据用户设置的参数计算绘制区域,根据计算结果对原始背景图像进行裁剪,得到特定区域的原始绘制数据。
32.其中,获取窗口的原始背景图像可以采用如下代码实现:void dblureffectwidget::updateblursourceimage(const qregion &ren){...
ꢀꢀ
d-》sourceimage=window()-》backingstore()-》handle()-》toimage().copy(...);
ꢀꢀ
qpainter pa_image(&d-》sourceimage);
ꢀꢀ
pa_image.setcompositionmode(qpainter::compositionmode_source);
ꢀꢀ
qimage area = window()-》backingstore()-》handle()-》toimage().copy(...);
ꢀꢀ
for (const qrect &rect : ren.rects()) {
ꢀꢀꢀꢀꢀꢀ
pa_image.drawimage(rect.topleft() qpoint(d-》radius, d-》radius), rect == area.rect() area : area.copy(rect));
ꢀꢀ
}...}得到特定区域的原始绘制数据后,需要将画笔设为混合模式,还可以对裁剪得到的原始背景图像在颜色和形状等方面进行调整,然后将调整后的原始图像数据绘制到控件面板上。其中,对裁剪得到的原始背景图像在颜色和形状等方面进行调整,以及将调整后的原始图像数据绘制到控件面板上可以采用如下代码实现:void dblureffectwidget::paintevent(qpaintevent *event){...qpainter pa(this);qimage image = d-》sourceimage.copy(...);qt_blurimage(&pa, image, radius, false, false);pa.setopacity(1);pa.fillrect(rect(), maskcolor());...}接下来,在步骤s730中,通过模糊效果控件类对原始绘制数据进行模糊处理,得到模糊后的图像。本实施例中,通过开发工具包(development toolkit,dtk)提供的模糊效果控件类(dblureffectwidget类)实现对原始绘制数据的模糊处理。dblureffectwidget的类图如图8所示,dblureffectwidget继承于qwidget和dtk对象基类dobject,而qwidget继承于绘制设备(qpaintdevice)。dblureffectwidge涵盖了若干成员函数,例如虚函数paintevent接口,调整模糊区域半径的函数接口,以及图形效果函数接口等。dblureffectwidge通过重载qwidget类中提供的虚函数paintevent接口进行实现模糊效果。
33.接下来,在步骤s740中,将模糊后的图像绘制到控件面板上,以完成模糊控件的创建。这一步骤可以使用如下代码实现:dblureffectwidget *bgblurwidget = new dblureffectwidget(q);bgblurwidget-》setblendmode(dblureffectwidget::inwindowblend);bgblurwidget-》setmaskcolor(dblureffectwidget::autocolor);bgblurwidget-》setmaskalpha(204); // 80%bgblurwidget-》setblurenabled(true);在一个实施方式中,用户还可以针对上述控件设置掩码参数,例如颜色和不透明度等,并将画笔设置为不透明,方法700将按照用户设置的掩码参数在控件面板上填充掩码
颜色,完成模糊控件的创建。
34.方法700采用计算机程序实现,程序指令存储在计算设备的系统存储器内,方法700在投入使用前,应当设置窗口混合模式为窗口内模糊,设置作为掩码的颜色和不透明度,最后开启模糊效果功能,在这个前提下,当dblureffectwidget收到窗口绘制事件时,窗口会有模糊效果,相应地,在窗口内创建的控件也会有模糊效果。
35.采用方法700在媒体播放器上创建播放栏控件,如图9所示,该控件上包括播放/暂停、播放上一个文件以及播放下一个文件共三个子控件,根据图9可知,该控件的背景是模糊的,但是其子控件是清晰的。
36.此外,根据图8所示的dblureffectwidge类的类图可知,dblureffectwidge类不仅能够对图像进行模糊处理,还能够设定模糊区域的形状,例如setmaskpath函数,利用setmaskpath函数可以将模糊区域设置为任意形状,包括不规则形状,dblureffectwidge类还涵盖了多个图形效果接口,例如setmaskcolor函数和setmaskalpha函数,用户可以通过函数组合设置的方式得到多种图形效果的融合效果,例如同时设置模糊图形效果、透明图形效果以及阴影图形效果。
37.本发明的实施例还提供了一种模糊控件创建装置1000,该装置能够执行如上文所描述的窗口内模糊的控件创建方法700的各步骤处理。下面,结合图10来描述上述模糊控件创建装置1000。
38.如图10所示,模糊控件创建装置1000包括控件创建单元1010、数据获取单元1020、模糊单元1030及绘制单元1040。
39.控件创建单元1010适于响应于控件创建请求,创建控件,并将控件的控件面板设置为透明。
40.数据获取单元1020适于获取控件面板的原始绘制数据。
41.模糊单元1030适于通过模糊效果控件类对原始绘制数据进行模糊处理,得到模糊后的图像。
42.绘制单元1040适于将模糊后的图像绘制到控件面板上,以完成模糊控件的创建。
43.根据本发明的一个实现方式,模糊效果控件类包括若干个图形效果函数接口。
44.根据本发明的一个实现方式,模糊效果控件类还包括模糊区域设置函数。
45.根据本发明的一个实现方式,数据获取单元1020包括原始背景图像获取单元和裁剪单元。原始背景图像获取单元适于获取控件面板的原始背景图像。裁剪单元适于对原始背景图像进行裁剪,得到特定区域的原始绘制数据。
46.根据本发明的一个实现方式,原始背景图像通过窗口绘制函数来获取。
47.根据本发明的一个实现方式,模糊控件创建装置1000还包括掩码单元,掩码单元适于按照用户设置的掩码参数对控件面板上的图像进行处理,并将处理结果绘制到控件面板上。
48.这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
49.在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的模糊控件创建方法。
50.以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
51.在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
52.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
53.类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
54.本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
55.此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
56.如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来
描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
57.尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献