关闭视图后Qt信号/插槽断开

时间:2013-06-13 02:14:26

标签: qt signals disconnect slot

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

我在子视图类中实现了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方法为需要在主应用程序中更新的每个用户首​​选项值发出信号(例如,撤消堆栈大小,窗口大小等)。信号通过主视图连接到子视图,一直到使用该值的目标类实例。

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

问题可能出在观点方面?

0 个答案:

没有答案