1

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

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

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

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

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

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

现在,当创建了多个 subWindows 时,我失去了在以前的 subWindows 中工作的能力。只有最新的 subWindow 按预期工作。例如。我QGraphicsItems只能在最新的子窗口中绘制,而不能在以前的子窗口中绘制。

我想我应该使用activeSubWindow()但无法弄清楚如何让每个 subWindow 响应选项卡的变化。我应该如何实现这个?

4

1 回答 1

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;
  }
}
于 2014-12-02T07:30:15.587 回答