• 8315阅读
  • 10回复

非QObject类与QObject类的信号传递问题,谢谢。 [复制链接]

上一主题 下一主题
离线mxw5495
 
只看楼主 倒序阅读 楼主  发表于: 2007-07-16
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
底层的事件接受类不是QObject的子类,要求这个类在接受到事件后向界面(QObject的子类)发送signal在那里处理。
我是自己定义了一个叫delivery的QObject的类,这个类里面做了一个signal,在事件接受类中得到这个类的指针,每当有事件来的时候用delivery的指针把信号emit出去;界面(QObject的子类)的初始化中connect了signal和处理的slot。在调试中发现能够emit信号,但是不能接受到,不知道是怎么回事,还是这样的处理方式不对,大家帮我看看吧
离线mxw5495
只看该作者 1楼 发表于: 2007-07-16
代码贴出来:

delivery.h:
#ifndef DELIVERY_H
#define DELIVERY_H

#include <QtCore/QObject>

class Delivery : public QObject
{
    Q_OBJECT

public:
    Delivery();
    ~Delivery();

    void DoTrans(unsigned int enEvent,long pDisp);
signals:
    void Trans(unsigned int enEvent,long pDisp);
};

#endif // DELIVERY_H
离线mxw5495
只看该作者 2楼 发表于: 2007-07-16
delivery.cpp

#include "delivery.h"


Delivery::Delivery()
    : QObject()
{
   
}

Delivery::~Delivery()
{

}
void Delivery::DoTrans(unsigned int enEvent,long pDisp)
{
    emit Trans(enEvent,pDisp);
}
离线mxw5495
只看该作者 3楼 发表于: 2007-07-16
底层事件的内容:
trcevent.h:

#include "sipphone.h"
#include "delivery.h"

class CRTCEvents : public IRTCEventNotification
{

public:
    CRTCEvents();
                    .....
    HRESULT STDMETHODCALLTYPE Event(RTC_EVENT enEvent, IDispatch *pDisp);
    Delivery *delivery;
    virtual ~CRTCEvents();
                    .....

};
离线mxw5495
只看该作者 4楼 发表于: 2007-07-16
HRESULT STDMETHODCALLTYPE CRTCEvents::Event(RTC_EVENT enEvent, IDispatch *pDisp)
{     
delivery->DoTrans((WPARAM)enEvent,(LPARAM)pDisp);//这里将信号emit出去

    return S_OK;
}
离线mxw5495
只看该作者 5楼 发表于: 2007-07-16
在界面里面,初始化了事件类,并做了connect:

m_pEvents = new CRTCEvents;
connect(m_pEvents->delivery,SIGNAL(Trans(unsigned int, long)),this,SLOT(OnRTCEvent(unsigned int, long)));

单步调试发现可疑接受到底层事件,emit也做了,在界面处理中却不能调用到slot函数OnRTCEvent(unsigned int, long),大家帮忙看看是怎么的,多谢
离线mxw5495
只看该作者 6楼 发表于: 2007-07-17
高人帮忙指点指点呀,还是没有解决呢。。。。
离线XChinux

只看该作者 7楼 发表于: 2007-07-17
只有从QObject派生出来的类才能使用signal/slot机制。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mxw5495
只看该作者 8楼 发表于: 2007-07-18
所以我用了一个delivery类来做中介,它是QObject的派生类,在非QObject类中调用它来发出SIGNAL,这样做可以吗?
离线ls002

只看该作者 9楼 发表于: 2007-07-18
采用多重继承试试,做一个类,继承QObject和非QObject类。
离线hackself
只看该作者 10楼 发表于: 2010-01-07
定义一个 QSignal ?我也没试过
快速回复
限100 字节
 
上一个 下一个