QMDI SubWindows switching

651 views Asked by At

I have an MDI application, with classes as

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

I'm creating a new mdiSubWindow on every newfile() of MainWindow which creates a new pointer to the GraphicsView.

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

And the constructor of GraphicsView creates a new Scene.

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

Now when there are multiple subWindows created, I lose the ability to work in previous subWindows. Only the latest subWindow works as expected. For eg. I can draw QGraphicsItems only in the latest Sub Windows and not in the previous ones.

I think I should be using activeSubWindow() but couldn't figure out how to make every subWindow respond to the change of the tabs. How should I implement this?

1

There are 1 answers

0
Gurjot Bhatti On BEST ANSWER

To make it work.

I've created a QList<QPair>, for storing a pair of subwindow and view.

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

Then subWindowActivated() signal is used to call the following function to update the view pointer.

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