我的应用程序的视图包含不同窗口中各种模型的表视图。当我将表子视图添加到主视图时,会从视图到子视图建立某些连接。我第一次创建表子视图时,建立连接并且所有连接都按预期工作。但是,如果我关闭子视图窗格并再次打开它,则不会重新建立连接。代码已执行,但实际上似乎没有发生任何连接。我认为这与之前关闭的子视图的不正确删除有关。
我在子视图类中实现了closeEvent(),并从内部调用了deleteLater()。不知道是否可以从同一个对象中调用deleteLater,但它确实触发了对象的析构函数。我也叫断开(这个);在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方法为需要在主应用程序中更新的每个用户首选项值发出信号(例如,撤消堆栈大小,窗口大小等)。信号通过主视图连接到子视图,一直到使用该值的目标类实例。
如果我甚至打开一个完全不同的表子视图,它也会产生相同的效果 - 没有建立任何连接。那么,似乎只为第一个子集建立了连接。之后,它失败了 - 无论第一个子视图是否在创建另一个子视图之前被销毁。
问题可能出在观点方面?