• 6783阅读
  • 5回复

[提问]为什么出现Object::connect: No such signal QMyWidget::(sigrecv()) [复制链接]

上一主题 下一主题
离线081203119
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-30
关键词: QT4求助signal

class QMyWidget:public QWidget
{
         Q_OBJECT
public:
                QMyWidget(QWidget *parent=0,Qt::WindowFlags f=0);
        public slots:
                void onrecv();
         signals:
                void sigrecv();
};


QMyWidget::QMyWidget(QWidget *parent,Qt::WindowFlags f):QWidget(parent,f)
{

        connect(this,SIGNAL((sigrecv())),this,SLOT(onrecv()));
        int j=10;
        while(j--)
        {
            emit(this->sigrecv());
        }
}

void QMyWidget::onrecv()
{
    cout<<"5hehe"<<endl;
}


int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QMyWidget mywin(0,0); return app.exec();
}
  
应该输出10次5hehe,为什么出现Object::connect: No such signal QMyWidget::(sigrecv())

离线jdwx

只看该作者 1楼 发表于: 2011-07-30
没有看见mywin->show()
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线081203119
只看该作者 2楼 发表于: 2011-07-30
回 1楼(jdwx) 的帖子
落下了,没贴上来,不是那个的问题啊
离线dbzhang800

只看该作者 3楼 发表于: 2011-07-31
很明显:

你没有信号:
QMyWidget::(sigrecv())

而只有
QMyWidget::sigrecv()

题外:你这个写法相当别扭
emit(this->sigrecv());
建议使用正常写法
emit sigrecv();
或者哪怕直接
sigrecv();
离线081203119
只看该作者 4楼 发表于: 2011-08-03
回 3楼(dbzhang800) 的帖子
呵呵  不是那个的问题哦,是connect出问题了, connect(this,SIGNAL((sigrecv())),this,SLOT(onrecv()));
第二参数SIGNAL((sigrecv()))多一个括号,应该是SIGNAL(sigrecv()),我那以前的代码再贴一遍就没错啦,才发现是这个括号的问题,然后把括号去掉了,错误就没了,很神奇呀。。。。


还是谢谢你拉
离线dbzhang800

只看该作者 5楼 发表于: 2011-08-03
Re:回 3楼(dbzhang800) 的帖子
引用第5楼081203119于2011-08-03 16:38发表的 回 3楼(dbzhang800) 的帖子 :
呵呵  不是那个的问题哦,是connect出问题了, connect(this,SIGNAL((sigrecv())),this,SLOT(onrecv()));
第二参数SIGNAL((sigrecv()))多一个括号,应该是SIGNAL(sigrecv()),我那以前的代码再贴一遍就没错啦,才发现是这个括号的问题,然后把括号去掉了,错误就没了,很神奇呀。。。。
还是谢谢你拉

这个??我前面告诉你的不就是多了一对括号么? connect 告诉你没有那个信号,我告诉你应该是哪个信号

至于emit,我只是告诉你,你的用法别扭,建议改正,我并没有说它错。只要只愿意,你甚至都可以写
emit emit emit(emit emit  this->sigrecv()  emit emit) emit emit ;
仍然不会错,只是一点:别扭!
快速回复
限100 字节
 
上一个 下一个