Qt中各个widget先后位置的设置

关于Qt中各个widget窗口的先后位置是如何定义的ide

在Qt中,全部问题都要一分为二,讨论两种不一样的状况:一个是最经常使用的QWidget体系,而另一个则是QGraphicsWidget体系。函数

      ①:在经常使用的QWidget体系中,设置先后位置是主要是用raise(),underStack(),hide()函数。.net

      理论为:在Qt中每一个widget窗口都维持着本身的一个建立栈(widget's stack.),栈里边存放的是该窗口全部子widget窗口的标识符(表明其各个子widget)。当建立一个子widget后,系统便会将将表明其的标识符压入其父widget的建立栈中。而这各个子widget显示的先后顺序择是:栈顶的在最上边,栈底的最下边。因此:后压入栈的显示在上边,先入栈的在下边。 由此可知:后建立的子widget会显示出来!代理

那么:当咱们建立了多个有重叠的子widget以后,最后建立的那个确定是咱们看到的那个。指针

       那如何改变这种前后顺序呢?对于一个子widget,咱们能够直接调用raise()函数来让其升到栈顶,从而显示在最上边用户面前,而不至于被遮挡;  固然咱们也能够用underStack()来让其处于某个子widget下边,从而来指定先后顺序。对象

      按照经验来看,其实只要使用raise()函数就足够了,须要显示谁,就直接让其调用raise()便可!!blog

      ②:对于QGraphicsWidget体系而言:get

           其内部放的是各个item,对于他们而言:咱们是直接能够用setZValue()来设置各个item之间的先后位置。博客

固然:还有一种混合状况,亦即:一个QGraphicsScene,其中既能够 用addItem()来加入item;也能够addWidget()来加入QWidget对象。 此时对于这种既有item,又有Qwidget的状况,该如何定义彼此之间的先后位置呢?it

     其实当咱们用addWidget()来想scene中加入QWidget时:该函数是有一个返回值的,为QGraphicsProxyWidget*类型指针。亦即:当咱们调用addWidget()这个函数时,其一共作了两步操做:

                                 一:系统首先把你原先的QWidget对象给转换成“item对象”。

                                 二:然后再将这个转换后生成的item放到scene场景中。

      可是其第一步操做中转换生成的“item对象”和真正的item对象仍是不同的,转换生成的仅仅是真正item的一种代理形式!即:生成了一个QGraphicsProxyWidget类型的代理item !!  可是对于这个代理item,咱们也能够用setZValue()来设置其先后位置啦!

      总结起来就是说:混合状况下,咱们用addWidget()向一个scene场景中加入普通QWidget时,会返回一个QGraphicsProxyWidget*类型指针(其表明真正放入这个scene中的代理item),咱们彻底能够用它来调用setZValue()来设置先后位置,这样其便和普通Item的先后位置设置方式相统一一致了!!


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/08/5568763.aspx

相关文章
相关标签/搜索