QGraphicsView 中的交替场景

Alternate scenes in a QGraphicsView

我有多个 QGraphicsScene 个对象,它们应该在不同的时间绘制成一个 QGraphicsView

一旦我通过 setScene 成员函数将场景分配给视图,是否可以将查看的场景更改为另一个场景?

如果我不想显示任何场景或者每次都必须传递一个有效指针,通过setScene分配nullptr是否安全?

例子

class MyViewer : public QObject{
Q_OBJECT
  QGraphicsView sc;
  QGraphicsScene scenes[10];
  int i;
public:
  //....
  QGraphicsView *getView() { return ≻}

  //called by a QTime event for example
  void update(){
    if(i >= 10)
      i = 0;
    sc.setScene(&(scene[i]));
    i++;
  }
};

int main(int n, const char **a){
  QApplication app(n, a);
  MyViewer vw;
  /*
   * Do some stuffs, initialize and connect a QTimer
   */
  vw.getView()->show();
  app.exec();
}

能不能换个场景看?

想换场景就换,文档没有禁止,你可以换。

如果我不想显示任何场景或者每次都必须传递一个有效指针,通过 setScene 分配 nullptr 是否安全?

Qt 检查指针是否有效并相应地执行操作,因此可以安全地传递 nullptr 来删除之前的场景。


在 Qt 中,如果某些事情是危险的并且是不允许的,那么它会在文档中明确指出。查看源代码也很容易理解行为。