• 2271阅读
  • 6回复

qt 信号发送自定义数据 [复制链接]

上一主题 下一主题
离线zoemolly
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-18
class user
{
     private:
    QString strName;
    QStirng  strPassword;
}
User 类如上
Q_DECLARE_METATYPE(User);
已经声明过了
qRegisterMetaType<User>("User");
在connect 之前也注册过了。
在不同的窗口都需要传递User类,怎么注册? 要注册很多次吗? 在什么地方注册?connect之前就可以, 还是必须在构造函数里面注册?

目前我遇到的问题是 我在一个单例类里发送信号 SINGAL(User),在窗口里 始终收不到信号 ,明天再试试 不知道哪里出问题了?


离线zoemolly

只看该作者 1楼 发表于: 2018-05-18
已经经常这么用,不知道为啥现在不行了 - -!
离线zoemolly

只看该作者 2楼 发表于: 2018-05-18
还有就是 我如果用User* 指针当参数,也需要注册对吧?
离线zoemolly

只看该作者 3楼 发表于: 2018-05-19
刚才试了试,发送 User* 参数 不执行这句话qRegisterMetaType<User*>("User*");  也可以发送,真搞不懂了!
离线zoemolly

只看该作者 4楼 发表于: 2018-05-19
搞定了,自己也不知道哪里出问题了,总结下
class User
{

public:
    QString m_strName;      //姓名
    QString m_strPassword;  //密码
    ROLE m_eRole;            //角色
    STATUS m_eStatus;        //状态Status 0:在线,:离线
};
Q_DECLARE_METATYPE(User);  

在信号发送之间某处,注册,注意User* 参数不用注册,且只注册一次即可
qRegisterMetaType<User>("User");
qRegisterMetaType<QList<User *>>("QList<User *>");

以下三种信号均可成功发送
void sig_recvOneUser(User);
void sig_recvOneUserp(User *);
void sig_recvUserplist(QList<User *>);
离线cyberpunker

只看该作者 5楼 发表于: 2018-05-23
回 zoemolly 的帖子
zoemolly:搞定了,自己也不知道哪里出问题了,总结下
class User
{
public:
....... (2018-05-19 11:23) 

离线jigetage

只看该作者 6楼 发表于: 2018-05-23
回 zoemolly 的帖子
zoemolly:搞定了,自己也不知道哪里出问题了,总结下
class User
{
public:
....... (2018-05-19 11:23) 

一般都是在main函数中进行metatype的注册,正所谓越早越好。
快速回复
限100 字节
 
上一个 下一个