QMDI SubWindows切换

时间:2014-12-01 10:41:38

标签: qt pointers tabs signals qmdiarea

我有一个MDI应用程序,类为

class MainWindow
{     GraphicsView *gv; };
class GraphicsView
{     Scene *scene; };
class Scene

我正在newfile() MainWindow创建一个新的mdiSubWindow,它会创建一个指向GraphicsView的新指针。

void MainWindow::newFile()
{
    gv = new GraphicsView;
    QMdiSubWindow *w = mdiArea->addSubWindow(gv);
    mdiArea->setActiveSubWindow(w);
}

GraphicsView的构造函数创建了一个新场景。

GraphicsView::GraphicsView()
{
    scene = new Scene;
    setScene(scene);
}

现在,当创建了多个子窗口时,我将失去在以前的子窗口中工作的能力。只有最新的子窗口按预期工作。例如。我只能在最新的Sub Windows中绘制QGraphicsItems而不是之前的。{/ p>

我认为我应该使用activeSubWindow(),但无法弄清楚如何让每个子窗口响应标签的更改。我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

让它发挥作用。

我创建了一个QList<QPair>,用于存储一对子窗口和视图。

windowViewList.append(qMakePair(w, view));

然后subWindowActivated()信号用于调用以下函数来更新视图指针。

void MainWindow::updatePointers()
{
  QMdiSubWindow *m = mdiArea->activeSubWindow();
  foreach (windowViewPair v, windowViewList)
  {
   if (m == v.first)
       gv = v.second;
  }
}