6

我知道我可以用来QSignalMapper根据连接调用具有不同参数的插槽。我想要实现的有点不同。

我们在我们的应用程序中使用插件,不同的插件负责不同类型的对象。我们将多个插槽(每个插槽都在不同的插件中实现)连接到主应用程序发出的一个信号。信号的参数之一是QString指示与信号相关联的对象的类型。目前,我们正在插槽中检查此参数,如果该类型由插件处理,则继续。这有一个缺点,每个插件都会做这个检查,如果可能的话我想避免这种情况。

我想将所有插槽连接到同一个信号,当信号发出时,根据QString参数的值只调用适当的插槽,有点像 aQSignalMapper但以不同的方式。

是否有任何内置机制可以做到这一点?如果没有,关于我如何实现这一目标的任何想法?

先感谢您。

4

3 回答 3

3

我不认为有一个组件,但你可以像这样创建自己的信号映射器:

  1. 创建一个 MySignalMapper 组件
  2. 编写 addSourceSignal 方法来设置主应用程序的信号
  3. 编写一个 addDestinationSlot 方法,该方法采用 QString/slot 对并将字符串映射到 slot。
  4. 在您的组件中,将源信号连接到基于 qstring 值调度的自定义插槽。您可以使用 QMetaObject::invokeMethod 调用插槽。
于 2009-10-14T13:13:48.450 回答
1

Qxt 有一个专门用于此功能的类。您可以使用 QxtCore 模块中的 QxtSlotMapper 类。

http://libqxt.bitbucket.org/doc/tip/qxtslotmapper.html

于 2014-03-10T09:13:34.917 回答
0

您可以将“类型”字符串的允许值限制为仅有效的 C++ 函数名称。强制插件根据它们处理的类型命名它们的插槽,然后为每个插件简单地尝试连接适当命名的插槽。

换句话说,你可以做什么QMetaObject::connectSlotsByName,除了实现你自己的命名约定。

于 2009-10-15T07:49:03.803 回答