Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. 一个QGraphicsView对象对两个QGraphicsScene对象
Forum Updated to NodeBB v4.3 + New Features

一个QGraphicsView对象对两个QGraphicsScene对象

Scheduled Pinned Locked Moved Solved Chinese
3 Posts 2 Posters 2.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • LimerL Offline
    LimerL Offline
    Limer
    wrote on last edited by
    #1

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

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

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

    joeQJ 1 Reply Last reply
    0
    • LimerL Limer

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

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

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

      joeQJ Offline
      joeQJ Offline
      joeQ
      wrote on last edited by
      #2

      @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 */
      }
      

      Just do it!

      1 Reply Last reply
      0
      • LimerL Offline
        LimerL Offline
        Limer
        wrote on last edited by
        #3

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

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved