【问题标题】:Alternate scenes in a QGraphicsViewQGraphicsView 中的备用场景
【发布时间】:2021-12-09 23:19:46
【问题描述】:

我有多个 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();
}

【问题讨论】:

  • 根据 QGraphicsView 文档页面中的措辞,我相信您的所有问题的答案都是肯定的,但只有您尝试后才能确定。
  • 我认为最好用一个例子来问你的问题。您可以拥有一个具有一个 QGraphicsView 对象和一个 QGraphicsScene 对象的视图类,并将该场景分配给 QGraphicsView 对象。然后你可以从这个类创建多个对象。并为每个此类添加不同的项目。
  • @JeremyFriesner 我可以尝试一下,但如果它是一个未记录的功能,那么这并不能保证它可以在其他平台或更高版本的 Qt 库上工作。所以我的问题是,无论实际的 Qt 库实现如何,这在 Qt 中是否合法。
  • @Parisa.H.R 那么你是说为每个场景分配不同的视图吗?这听起来有点棘手,但实际上我不想每次都从我的主窗口中删除和添加一个小部件。
  • @desio ,我不知道你在做什么。你应该用一个例子来解释你的问题。

标签: c++ qt qgraphicsview qgraphicsscene


【解决方案1】:

可以用另一个改变观看的场景吗?

您可以随时更改场景,文档并没有说明禁止,因此您可以这样做。

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

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


在 Qt 中,当某些事情是危险的并且不允许时,它将在文档中明确指出。看源码也很容易理解行为。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2012-01-08
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多