一种基于Qt的自定义控件的使用方法

文档序号:6383975阅读:4206来源:国知局
专利名称:一种基于Qt的自定义控件的使用方法
技术领域
本发明涉及Qt的图形界面开发方法,尤其是一种应用在嵌入式领域的Qt图形界面开发方法。
背景技术
在嵌入式领域中,以VxWorks为例,在保证系统实时性的前提下,功能更为强大的人性化界面设计要求越来越高。目前在VxWorks下多采用其内嵌的WindML图形库组件进行开发,该组件对窗口、控件等图形开发功能较弱。Qt相比WindML等其他图像开发库,具有支持多平台、代码可移植性强、图形库功能丰富等优点。采用VxWorks和Qt相结合的形式可以作为嵌入式图形界面开发的一个解决方案。Qt提供了丰富的类库,对于采用系统默认风格的界面开发已经够用。如果直接继承Qt基本类库,同时直接对继承后的子类进行设置和引用,尽管最终可以实现界面设计要求,但会导致在应用程序中对相同类别派生出的多个对象进行多次重复设置。这样会降低代码的可读性、增加了各模块间的耦合度,不利于软件的维护。另外,目前广泛使用的可视化开发工具Qt Designer在控件样式设置、位置布局等方面显得不够灵活,同时利用它不能够在程序运行时动态的生成控件。

发明内容
本发明旨在解决目前Qt开发过程中存在的模块耦合度高、代码可读性差等问题,本发明提供了一种基于Qt的自定义控件的使用方法,其包括以下步骤
基于Qt基本类库中的类作为父类派生出自定义控件类,所述自定义控件类重载所述父类成员函数或新建新构造函数实现对自身的封装;
自定义控件类作为自定义控件使用时,为所述自定义控件类分配空间并调用所述重载的父类成员函数或构造函数。较佳地,一个Qt图形界面包括多个自定义控件类,所述多个自定义控件类相互独立并能配合使用。较佳地,所述的封装包括对样式、功能、事件的封装。本发明的有益效果
使用基于Qt的图形界面的自定义控件开发,能够有效降低软件模块间的耦合度,同时使程序代码变得简洁,从而易于维护;另外,还能够动态的对控件进行操作。


结合附图,通过下文的述详细说明,可更清楚地理解本发明的上述及其他特征和优点,其中
图1示出了本发明的流程 图2为实现本发明实施例I的流程 图3为实现本发明实施例2的流程 图4为实现本发明实施例3的流程图。
具体实施例方式参见示出本发明实施例的附图,下文将更详细地描述本发明。然而,本发明可以以许多不同形式实现,并且不应解释为受在此提出之实施例的限制。相反,提出这些实施例是 为了达成充分及完整公开,并且使本技术领域的技术人员完全了解本发明的范围。这些附图中,为清楚起见,可能放大了层及区域的尺寸及相对尺寸。如图1所示,本发明提供了一种基于Qt的自定义控件的使用方法,其过程为 基于Qt基本类库中的类作为父类派生出自定义控件类,所述自定义控件类重载所述
父类成员函数或新建新构造函数实现对自身的封装;
自定义控件类作为自定义控件使用时,为所述自定义控件类分配空间并调用所述重载的父类成员函数或构造函数。一个Qt图形界面上可以生成多个自定义控件类,各个自定义控件类相互独立,本实施例中分别对各个自定义控件类独立设置其样式、功能事件等,各自定义控件类相互配合使用。实施例I
图2所示的实施例I中,设计并应用了自定义Label控件。其具体过程为
使用Qt自带的Qlabel类作为父类派生出label_widget类作为自定义Label控件,其构造函数声明如下
label_widget(Qffidget 氺parent = O, quintl6 x = 10, quintl6 y = 10, quintl6 w=10, quintl6 h = 10, QString lbl_text = tr(""),QString lbl_font = tr("宋体"),quint8 lbl_size = 12, bool changeble = false, QColor color—back = Qt::black,QColor color_fore = Qt::white, bool frame = true);
此构造函数完成的功能有使用Qt自带的QLabel类设置Label控件背景色,Label底色和边框颜色一起改变,为达到边框立体的效果,利用两个Label来实现;底层Label用来保持边框样式,顶层Label用来设置背景色和文字颜色。Qt要求类的构造函数在声明时其参数强制赋初值,因此可以用最常用的样式来设置参数初值,此处采用黑底白字作为缺省颜色。另外还可以重载QLabel类的虚函数setColorO、setText O来对顶层Label的颜色、文字进行设置,以便在程序中动态设置label_widget类对象的样式。使用自定义label_widget类,只需要调用一条构造函数语句就可以在屏幕指定位置生成所需样式的Label控件,例如下面的缺省调用。label_widget* label = new label_widget(NULL, 300,300,200,100,tr("Label控件测试〃),tr(〃宋体〃),9)。实施例2图3所示的实施例2中,设计并应用了自定义动态控件。除了位置固定的显示界面外,有时还存在动态的信息显示需求,例如在雷达PPI显示画面中的目标信息。以往多采用绘图的方式来绘制动态信息,可使用异或、贴图重画、全屏刷新等方法来实现。缺点是软件编程条件判断分支多、处理繁琐且容易出现画面闪烁。利用Qt,通过自定义控件类实现动态控件,可以很好的对动态信息进行显示,不受其他窗口遮挡影响且无需重绘,并彻底解决之前方法所带来的问题。为实现PPI显目标控件,基于QWidget生成moving_widget类,为其构造函数添加一个参数type,用于指定绘制的目标类型。构造函数定义如下
moving_widget: :moving_widget(Qffidget ^parent, qu i nt8 type) :Qffidget(parent)
{
resize (80, 40) ; //控件尺寸 t_type = type; //初始化目标类型(1:飞机2 :导弹3 :直升机)
}
在moving_widget类中重载成员函数paintEvent (), 通过QPainter类实现对各种目标图符、批号的绘制,其中飞机,导弹:^001,直升机^ 2。在需要显示目标的P显窗口控件中创建目标,并在指定方位、距离上显示该目标图符和批号,创建、显示目标的代码如下moving_widget* target = new moving_widget(this, I);
PPI_ffidget::target_draw(target, a, r, 6001);
其中,target_draw是自定义P显窗口控件PPI_Widget的私有成员函数,可根据目标方位、距离、批号信息在P显相应位置绘制该目标。当目标参数发生变化时,可通过target->move (x, y)直接移动该动目标控件,而无需在新位置上进行重绘和抹去旧目标。实施例3
在图4所示的实施例3中,设计并应用了含有多个子控件的自定义控件。在Qt开发中,经常会在主界面上叠加子窗口,有时需要对无标题栏的子窗口实现鼠标拖曳功能,同时又不会影响主界面及其他子窗口。可以通过自定义控件来实现该子窗口,在自定义控件类中重载QWidget的成员函数mouseMoveEvent O、mousePressEvent O ,通过返回的QMouseEvent事件类型来获取控件位移量,再通过QWidget: :move O移动控件,就可以实现鼠标对该子窗口的拖曳处理。如果窗口由多个子控件组成,每个子控件都需要对鼠标按下事件进行响应。假如对每个子控件都重载QWidget的mousePressEvent O ,显然代码重复率高,同时增加了模块间的耦合度。这时可以通过自定义控件来实现该窗口,在自定义控件类中使用事件过滤器eventFilterO来对子控件的事件进行统一处理。以雷达PPI显量程设置窗口为例,它由多个自定义label控件组成,其中有很多label控件都需要响应鼠标按键事件。利用自定义控件生成该窗口,在自定义控件类中重载成员函数 eventFilter O
eventFilter(QObject * obj, QEvent * event)
{if (obj == label_12)
if (eventtype() == QEvent::MouseButtonPress)
label_12->setColor(Qt::white, Qt::black);
}
eventFilter ()主要由两个参数组成,首先通过obj参数判断是哪个子控件需要响应事件,再根据event参数确定是哪类事件类型,之后便可对需要响应该事件类型的label控件进行颜色设置。
使用基于Qt的图形界面的自定义控件开发,能够有效降低软件模块间的耦合度,同时使程序代码变得简洁,从而易于维护;另外,还能够动态的对控件进行操作。因本技术领域的技术人员应理解,本发明可以以许多其他具体形式实现而不脱离本发明的精神或范围。尽管业已描述了本发明的实施例,应理解本发明不应限制为这些实施例,本技术领域的技术人员可如所附权利要求书界定的本发明精神和范围之内作出变化和修改。
权利要求
1.一种基于Qt的自定义控件的使用方法,其特征在于,包括以下过程基于Qt基本类库中的类作为父类派生出自定义控件类,所述自定义控件类重载所述父类成员函数或新建构造函数实现对自身的封装;自定义控件类作为自定义控件使用时,为所述自定义控件类分配空间并调用所述重载的父类成员函数或构造函数。
2.如权利要求I所述的基于Qt的自定义控件的使用方法,其特征在于,一个Qt图形界面包括多个自定义控件类,所述多个自定义控件类相互独立并配合使 用。
3.如权利要求I所述的基于Qt的自定义控件的使用方法,其特征在于,所述的封装包括对样式、功能、事件中的一种或其组合的封装。
全文摘要
本发明提供了一种基于Qt的自定义控件的使用方法,其过程为基于Qt基本类库中的类作为父类派生出自定义控件类,所述自定义控件类重载所述父类成员函数或新建新构造函数实现对自身的封装;自定义控件类作为自定义控件使用时,为所述自定义控件类分配空间并调用所述重载的父类成员函数或构造函数;其中一个Qt图形界面可以包括多个独立的自定义控件类配合使用。本发明使用基于Qt的图形界面的自定义控件开发,能够有效降低软件模块间的耦合度,同时使程序代码变得简洁,从而易于维护;另外,还能够动态的对控件进行操作。
文档编号G06F9/44GK102981861SQ20121053459
公开日2013年3月20日 申请日期2012年12月12日 优先权日2012年12月12日
发明者高宇, 史云鹏, 施连灯 申请人:上海航天测控通信研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1