一个QGraphicsView对象对两个QGraphicsScene对象



  • QGraphicsView *view;
    QGraphicsScene *scene1;
    QGraphicsScene *scene2;

    两个场景都有一些可以重复运动的图元,还有三个按钮,【开始运动】,【暂停/继续运动】,【重新开始】。
    现在view->setScene(scene1),点击按钮【开始运动】,图元开始运动,如果接着再把该view改为setScene(scene2)的话,那scene1的那些还在运动的图元会怎么样,暂停,还是结果未知。

    我试了下,是暂停,但是这里边具体会发生什么我也不懂,求指教。



  • @Limer 您好,欢迎。

    恭喜,你的方法是正确的,得到的结果也是正确的。

    setScene的过程中,伪代码如下:

    void setScene(QGraphicsScene *scene)
    {
        /** some code */
        if(d->scene == scene){ ///< if has same scene, just return
            return;
        }
    
        if(d->scene){
            /** if has old scene */
            ///< disconnect scene changed signal 
            ///< disconnect scene sceneRectChanged signal
             /** Note: will send Deactivate(停用) to scene */
             if (isActiveWindow() && isVisible()) {
    	          QEvent windowDeactivate(QEvent::WindowDeactivate);
    	          QApplication::sendEvent(d->scene, &windowDeactivate);
    	   }
    
    	   if(hasFocus()){
    	            d->scene->clearFocus();   
               }
        }
        /** some code */
    }
    


  • 谢谢,我懂了。(凑出8个字)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.