• 4321阅读
  • 4回复

[提问]求助信号和槽?? [复制链接]

上一主题 下一主题
离线lovexin109
 

只看楼主 倒序阅读 楼主  发表于: 2014-06-09
我有两个类,A,和B,
A是这样的,我想在A中产生OnDataChange时发送这个信号,但是编译无法通过,显示undefined reference to `csink::cs_signal()'

-----------------------------------------------------------------------------------
..H如下
#ifndef CSINK_H
#define CSINK_H
#include<QAxObject>
#include"opcda.h"
#include"opccomn.h"
#include"opcerror.h"
class csink:public IOPCDataCallback,public QObject//,public IUnknown
{
Q_OBJECT
public:
    csink();
    ~csink();
    STDMETHODIMP QueryInterface(REFIID iid,LPVOID *ppInterface);
    STDMETHODIMP_(ULONG) AddRef();
    STDMETHODIMP_(ULONG) Release();
    STDMETHODIMP OnDataChange(
       /* [in] */ DWORD dwTransid,
        /* [in] */ OPCHANDLE hGroup,
       /* [in] */ HRESULT hrMasterquality,
       /* [in] */ HRESULT hrMastererror,
       /* [in] */ DWORD dwCount,
       /* [size_is][in] */ OPCHANDLE *phClientItems,
       /* [size_is][in] */ VARIANT *pvValues,
        /* [size_is][in] */ WORD *pwQualities,
       /* [size_is][in] */ FILETIME *pftTimeStamps,
       /* [size_is][in] */ HRESULT *pErrors);
……
signals:
    void cs_signal();
private:
    DWORD m_cnRef;
};
#endif // CSINK_H
--------------------------------------------------------------------------------------------------------------
.CPP是这样的
#include "csink.h"
csink::csink() :m_cnRef(0)
{
}
csink::~csink()
{
}
……
STDMETHODIMP csink::OnDataChange(
       /* [in] */ DWORD dwTransid,
       /* [in] */ OPCHANDLE hGroup,
       /* [in] */ HRESULT hrMasterquality,
       /* [in] */ HRESULT hrMastererror,
       /* [in] */ DWORD dwCount,
       /* [size_is][in] */ OPCHANDLE *phClientItems,
       /* [size_is][in] */ VARIANT *pvValues,
       /* [size_is][in] */ WORD *pwQualities,
       /* [size_is][in] */ FILETIME *pftTimeStamps,
       /* [size_is][in] */ HRESULT *pErrors)
{
    DWORD i;
    UINT q_int0,q_int1,q_int2,q_int3;//质量码
    FILETIME satime0,satime1,satime2,satime3;
……
    for (i=0;i<dwCount;i++)
    {
......
    }
   emit cs_signal();

}

我想在OnDataChange时发送这个信号,但是编译无法通过,显示undefined reference to `csink::cs_signal()'
不知道哪里出错或不正确了,求现身
离线dbzhang800

只看该作者 1楼 发表于: 2014-06-09
不清楚你的  IOPCDataCallback 是个什么东东,但是多重继承,而且QObject不是第一个父类,是肯定不行的。
离线lovexin109

只看该作者 2楼 发表于: 2014-06-10
回 dbzhang800 的帖子
dbzhang800:不清楚你的  IOPCDataCallback 是个什么东东,但是多重继承,而且QObject不是第一个父类,是肯定不行的。 (2014-06-09 23:43)

谢谢版主,试过了,将QObject写在第一个,也是报这个错误,IOPCDataCallback是OPC是东西,是基于COM,这个类是COM回调用的,严格来说这个应该不叫类
离线pxiao_xiao

只看该作者 3楼 发表于: 2014-06-10
改设计方式 内部含一个QObject子类对象
离线lovexin109

只看该作者 4楼 发表于: 2014-06-10
回 pxiao_xiao 的帖子
pxiao_xiao:改设计方式 内部含一个QObject子类对象 (2014-06-10 11:12) 

谢谢,我刚才试了一下,不继承QObject,包含一个button,用它的cliked事件,就可以了

  emit signal_button.clicked();

QObject::connect(&(qcsink->signal_button),SIGNAL(clicked()),this,SLOT(cs_slot()));

非常感谢
快速回复
限100 字节
 
上一个 下一个