1

クラスが次のようなMDIアプリケーションがあります

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

GraphicsView への新しいポインターを作成するたびnewfile()に、新しい mdiSubWindow を作成しています。MainWindow

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

のコンストラクターはGraphicsView、新しい Scene を作成します。

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

複数のサブウィンドウが作成されると、以前のサブウィンドウで作業できなくなります。最新のサブウィンドウのみが期待どおりに機能します。たとえば。QGraphicsItems以前のサブ ウィンドウではなく、最新のサブ ウィンドウでのみ描画できます。

使用する必要があると思いますactiveSubWindow()が、すべてのサブウィンドウをタブの変更に応答させる方法がわかりませんでした。これをどのように実装すればよいですか?

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 に答える