【问题标题】:QMDI SubWindows switchingQMDI 子窗口切换
【发布时间】:2014-12-01 10:41:38
【问题描述】:

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

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

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

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

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

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

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

我想我应该使用activeSubWindow(),但不知道如何让每个子窗口响应选项卡的变化。我应该如何实现这个?

【问题讨论】:

  • "I lose the ability to work in previous subWindows" 是什么意思?
  • @vahancho 我编辑并举了一个例子。
  • 我认为您使用指向图形场景的指针并在创建新视图时对其进行更新。您也需要在激活子窗口时对其进行更新。考虑使用QMdiArea::subWindowActivated() 信号。

标签: qt pointers tabs signals qmdiarea


【解决方案1】:

让它发挥作用。

我创建了一个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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多