0

我有一个应用程序,其视图包含不同窗口中各种模型的表视图。当我将表子视图添加到主视图时,会从视图到子视图建立某些连接。我第一次创建表子视图时,连接已建立并且所有工作都按预期工作。但是,如果我关闭子视图窗格并再次打开它,则不会重新建立连接。代码已执行,但实际上似乎没有发生任何连接。我认为这与不正确删除先前关闭的子视图有关。

我在子视图类中实现了 closeEvent() 并从内部调用了 deleteLater() 。不知道从同一个对象中调用 deleteLater 是否合理,但它确实触发了对象的析构函数。我也调用了disconnect(this); 在closeEvent()中,但无济于事。

唯一的另一件事是主视图没有被指定为子视图的父视图。修复这似乎是有问题的。有必要吗?

    SubView *sview = mSubViewFactory.makeSubView (id, *mDocument);
    mSubViewWindow.addDockWidget (Qt::TopDockWidgetArea, sview);

    connect (sview, SIGNAL (focusId (const CSMWorld::UniversalId&)), this,
    SLOT (addSubView (const CSMWorld::UniversalId&)));

    connect (this, SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)),
         sview, SIGNAL (signalUpdateEditorSetting (const QString&, const QString &)) );

    connect (this, SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)),
         sview, SLOT (slotTest (const QString &, const QString &)));

    CSMSettings::UserSettings::instance().updateSettings("Editor");

上面的代码是在主视图和子视图之间创建连接的代码。子视图由工厂创建,该工厂跨两个类实现......

UserSettings 单例的 updateSettings 方法为每个需要在主应用程序中更新的用户偏好值发出一个信号(例如,撤消堆栈大小、窗口大小等)。信号通过主视图连接到子视图,再连接到使用该值的目标类实例。

看起来,如果我什至打开一个完全不同的表子视图,它也会产生相同的效果 - 没有建立连接。那么,似乎只为第一个 subvew 建立了联系。之后,它会失败 - 无论第一个子视图是否在创建另一个子视图之前被销毁。

也许问题出在视图方面?

4

0 回答 0