• 5870阅读
  • 10回复

在不同线程发送自定义的信号,槽函数没有执行 [复制链接]

上一主题 下一主题
离线081203119
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-30

出现Object::connect: No such signal QIpmsg::(sigrecvmsg(char *,char *))

类QIPmsg:H文件
class  QIpmsg:public QDialog
{
    Q_OBJECT
    public:
       QIpmsg(QWidget *parent=0,Qt::WindowFlags f=0);
    public slots:
               void onrecvmsgGui(char *name,char *msg);
    signals:
        void sigrecvmsg(char *name,char *msg);
    private:
      Ui_Dialog ui_dlg;
         static void* recvmsg_thread(void* arg);//接收其他用户发送的UDP数据
};

C文件中 :在QIPmsg构造函数里
connect(this,SIGNAL((sigrecvmsg(char *,char *))),this,SLOT(onrecvmsgGui(char *,char *)),Qt::QueuedConnection);
    this->online();

槽函数:
void QIpmsg::onrecvmsgGui(char *name,char *msg)
{
    cout<<"5hehe"<<endl;
    QUsrmsg *pumsg=new QUsrmsg(0,0);
    pumsg->displaymsg(name,msg);
    cout<<"5hehe"<<endl;
}


在线程recvmsg_thread里 发送信号sigrecvmsg(const char *,const char *),为什么槽函数没有执行呢?



离线myseemylife

只看该作者 1楼 发表于: 2011-07-30
你在connect的时候,表明发送者和接受者都应该在同一个线程,这个类继承自Dialog。所以发送和接受都应该在主线程里面做的吧,后面connect的参数是队列连接,当发送者,接受者在同一线程的时候等同于直接连接了吧 不明白LZ想怎么做·~
蠢笨的愚钝~
离线jdwx

只看该作者 2楼 发表于: 2011-07-30
回 楼主(081203119) 的帖子
没有看到另一个线程内的emit部分。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线081203119
只看该作者 3楼 发表于: 2011-07-30
回 1楼(myseemylife) 的帖子
我就是想在子线程发消息给主线程,别人说可以connect,然后发信号,我就这么做了。但是不知道怎么弄
离线081203119
只看该作者 4楼 发表于: 2011-07-30
回 2楼(jdwx) 的帖子
有emit  我没有写出来  在构造函数里我把this指针传递到子线程 ,然后在子线程emit
离线jdwx

只看该作者 5楼 发表于: 2011-07-30
我没试过这么用,我都是把信号放到Thread类里。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线081203119
只看该作者 6楼 发表于: 2011-07-30
回 5楼(jdwx) 的帖子
之前没接触过QTread,现在写了那么多,不想改啊,而且提示的错误是:Object::connect: No such signal QIpmsg::(sigrecvmsg(char *,char *))
离线jdwx

只看该作者 7楼 发表于: 2011-07-30
回 6楼(081203119) 的帖子
就改一个信号,不会很复杂吧。
Qt-Thread的关键是在Thread里不能操作主线程(界面),要通过信号和槽,或者发消息通信。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线081203119
只看该作者 8楼 发表于: 2011-07-30
回 7楼(jdwx) 的帖子
好吧,但我感觉是那个connect出了问题啊 ,因为运行时出现Object::connect: No such signal QIpmsg::(sigrecvmsg(char *,char *))

离线081203119
只看该作者 9楼 发表于: 2011-07-30
疯了 ,居然只是一个括号的问题,
connect(this,SIGNAL((sigrecvmsg(char *,char *))),this,SLOT(onrecvmsgGui(char *,char *)),Qt::QueuedConnection);
connect第二参数应该是SIGNAL(sigrecvmsg(char *,char *)),而不是SIGNAL((sigrecvmsg(char *,char *))),就因为多一个括号才有Object::connect: No such signal QIpmsg::(sigrecvmsg(char *,char *)) 太神奇了。。。

离线081203119
只看该作者 10楼 发表于: 2011-07-30
引用第9楼081203119于2011-07-30 23:24发表的  :
疯了 ,居然只是一个括号的问题,
connect(this,SIGNAL((sigrecvmsg(char *,char *))),this,SLOT(onrecvmsgGui(char *,char *)),Qt::QueuedConnection);
connect第二参数应该是SIGNAL(sigrecvmsg(char *,char *)),而不是SIGNAL((sigrecvmsg(char *,char *))),就因为多一个括号才有Object::connect: No such signal QIpmsg::(sigrecvmsg(char *,char *)) 太神奇了。。。



快速回复
限100 字节
 
上一个 下一个