代码之家  ›  专栏  ›  技术社区  ›  Max Frai

无对象连接

  •  2
  • Max Frai  · 技术社区  · 15 年前

    我想连接一些没有类的slot函数,可以这样做吗:

    void update() { }
    
    int main()
    {
      QTimer timer = ...;
      QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
      return 0;
    }
    

    编译器说,没有对象是不可能的。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Edward Strange    15 年前

    AFAIK,只能连接信号到时隙,时隙只能作为QQObjor的成员函数存在。

    虽然很多人关注Qt信号和boost::信号或GTKmm信号之间的模板和moc差异,但这是我最终更关心的差异。Qt的信号没有我想要的那么有表现力,并且导致更多的依赖性。

    我仍然使用Qt,但这只是因为在win32系统上完全缺少GTKmm可访问性。

    当然,您可以做的是将QTimer的一个子类与自己的超时信号相连接,并使用一个插槽生成一个boost::信号,该信号可以连接到外部函数。不过,要注意在Qt中使用boost信号的问题,我只是使用signals2来完全避免它,并且我获得了线程安全性。

        2
  •  1
  •   tibur    15 年前

    你需要Qt识别插槽。要做到这一点,你必须改变一个班级。所以我会说不可能。

        3
  •  1
  •   dev    14 年前

    你可以使用Boost的信号槽机制。 Boost Signal Slot

    如果您使用的是Qt 4.1或更高版本,这两个版本都可以一起使用,如下所述 Boost signals & slots with Qt