Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. 一个QGraphicsView对象对两个QGraphicsScene对象
Qt 6.12 LTS is out! See what's new in the release blog

一个QGraphicsView对象对两个QGraphicsScene对象

Scheduled Pinned Locked Moved Solved Chinese
3 Posts 2 Posters 3.3k 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
        • Unsolved