• 7449阅读
  • 7回复

QT的connect也成功了,却收不到消息版是怎么回事? [复制链接]

上一主题 下一主题
离线csoapy
 

只看楼主 倒序阅读 楼主  发表于: 2007-03-13
— 本帖被 XChinux 执行加亮操作(2007-03-14) —
如题,谢谢!!
[ 此贴被XChinux在2007-03-14 10:59重新编辑 ]
离线chwoozy

只看该作者 1楼 发表于: 2007-03-13
具体是怎么一回事?能帖图来看看吗?
离线csoapy

只看该作者 2楼 发表于: 2007-03-13
是这样的,两个对象,其中一个继承自QThread,在重载的run()里面我emit 一个信号就return了。另一个对象是继承自QWidget的,在构造函数中我执行connect,debug发现connect返回true。又跟踪run( ),发现emit也发出了,可程序就是没有执行到断点处(被连接到的槽)。
离线attica

只看该作者 3楼 发表于: 2007-03-13
如果Slot使用的参数是用户定义的类型,则需要注册

qRegisterMetaType<USER_TYPE>("USER_TYPE");
离线csoapy

只看该作者 4楼 发表于: 2007-03-13
我注册的时候出错:
qRegisterMetaType(Reg);
qRegisterMetaType(DI_ERROR);

.\power.cpp(9) : error C2275: “Reg”: 将此类型用作表达式非法
        g:\power\power\DataItem.h(28) : 参见“Reg”的声明
.\power.cpp(10) : error C2275: “DI_ERROR”: 将此类型用作表达式非法
        g:\power\power\Meter.h(9) : 参见“DI_ERROR”的声明
离线csoapy

只看该作者 5楼 发表于: 2007-03-13
相关定义:

class Reg
{
public:
    Reg(void){}
    //Reg(char id):_id(id){}
    Reg(char id, unsigned value = 0):_id(id),  _value(value){}
    virtual ~Reg(void){};

    char getId() const {return _id;}
    unsigned getValue() const {return _value;}

    void setId(const char& id) { _id = id; }
    void setValue(const unsigned & value) { _value = value;}

private:
    char        _id;
    unsigned    _value;
};
enum DI_ERROR{ NOERROR_METER, TIMEOUT, BREAKDOWN, NOTOPEN};
离线csoapy

只看该作者 6楼 发表于: 2007-03-14
知道了,
qRegisterMetaType<Reg>("Reg"); // 跨线程发送信号时是按队列的方式进行了,所以要注册一下类型。

谢谢!!
离线sflute
只看该作者 7楼 发表于: 2007-03-14
在线程里用 postEvent 比较好。
快速回复
限100 字节
 
上一个 下一个