【问题标题】:Signals not received using QServiceManager使用 QServiceManager 未收到信号
【发布时间】:2015-05-21 13:51:36
【问题描述】:

我的 QServiceManager 有问题。

QServiceManager manager;
CFoo bar;
QList<QServiceInterfaceDescriptor> ServiceList = manager.findInterfaces(SERVICE_NAME);

for(int i = 0; i < ServiceList.length(); i++)
{
   bool accessGranted = false;
   QServiceInterfaceDescriptor descriptor = ServiceList[i];
   if (descriptor.interfaceName() == INTERFACE)
   {
        bar = manager.loadLocalTypedInterface<IFoo>(descriptor, accessGranted);
        if (NULL == bar && false == accessGranted)
        {
            connect(bar,            SIGNAL(signal()),
                    this,                     SLOT(slot()));
        }
   } 
} 

我可以在bar上的接口IFoo中指定函数调用,比如:

bar.function()

我看到远程对象 foo 正在接收函数调用,但是当我远程发送信号时:

 class IFoo : public QObject
 {
      Q_OBJECT          
 public:
     virtual void function() = 0:

 signals:
     void signal();
 };

 class CFoo : public IFoo`
 {
    Q_OBJECT      

    void function()
    {
        emit signal();
    }
};

没有收到。函数 slot() 永远不会被调用。我检查了连接函数是否被调用并返回 TRUE。谁能指出我做错了什么?

【问题讨论】:

  • CFoo 不是QObject

标签: c++ qt


【解决方案1】:

如果你的类不是 qobject,就不能使用信号和槽

 #include<QObject>

 class CFoo : public QObject, public IFoo
 {
    Q_OBJECT

    signals:

         void signal();   

    public:

    void function()
    {
        emit signal();
    }
};

【讨论】:

  • 对不起,我忘了说 IFoo 继承自 QObject。所以这不是问题。
  • @Frank:你还需要添加宏Q_OBJECT
  • @Amartel 我这样做。查看 IFoo 的实现
  • @Frank 但 CFoo 也应该继承自 QObject 并具有 Q_OBJECT
  • 我只是假设你在 CFoo 中定义了signal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多