当前位置:编程学习 > wap >>

急求!!qt找不到信号槽函数!

本渣周五要交大作业了。。到今天还没搞定socket...求各位大神帮忙

(在qt4 那本书上的关于tcp的范例)

我派生了一个继承QTcpSocket的类 MySocket

然后在Mysocket的构造函数里面连接了readyrad和槽。

编译通过。但是运行的时候告诉我:Object::connect: No such slot QTcpSocket::wtf() in mysocket.cpp:8

!!!这是为什么呢!

mysocket.h
#ifndef MYSOCKET_H
#define MYSOCKET_H

#include <QTcpSocket>

class MySocket : public QTcpSocket
{
public:
    MySocket();

private slots:
    void readClient();
    void wtf();


private:
    void sentResult();

    quint16 nextBlockSize;
};

#endif // MYSOCKET_H


mysocket.cpp
#include <QtNetwork>
#include "mysocket.h"

MySocket::MySocket()
{

   // connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater()));
    connect(this, SIGNAL(readyRead()), this, SLOT(wtf()));

    nextBlockSize = 0;
}


void MySocket::wtf()
{
    qDebug()<<"??";
    QDataStream in(this);
    in.setVersion(QDataStream::Qt_4_7);


    if (nextBlockSize == 0) {
        if (bytesAvailable() < sizeof(quint16))
            return;
        in >> nextBlockSize;
    }

    if (bytesAvailable() < nextBlockSize)
        return;


    QString temp;
    in >> temp;
    qDebug()<<temp;

    QDataStream out(this);
    out << quint16(0xFFFF);
    close();
}

void MySocket::sentResult()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);

  
    out.device()->seek(0);
    out<<quint16(block.size()-sizeof(quint16));
    write(block);
}
--------------------编程问答-------------------- clean了 重新 qmake make 一下 --------------------编程问答-------------------- 缺少宏定义
Q_OBJECT --------------------编程问答-------------------- connect可这样写的?发送接收收一样的 --------------------编程问答--------------------
引用 2 楼 chenlingzhen 的回复:
缺少宏定义
Q_OBJECT

没有这个宏。 --------------------编程问答--------------------
引用 4 楼 ying_593254979 的回复:
Quote: 引用 2 楼 chenlingzhen 的回复:

缺少宏定义
Q_OBJECT

没有这个宏。


要使用信号槽就得在类定义的时候加入Q_OBJECT,要不就得用
QObject::connect --------------------编程问答--------------------
引用 5 楼 chenlingzhen 的回复:
Quote: 引用 4 楼 ying_593254979 的回复:

Quote: 引用 2 楼 chenlingzhen 的回复:

缺少宏定义
Q_OBJECT

没有这个宏。


要使用信号槽就得在类定义的时候加入Q_OBJECT,要不就得用
QObject::connect
不对啊。
这个宏跟QObject::connect没什么关系。可以看一下Qt元对象机制。这个宏和moc编译器会生成一些moc开头的文件。你的槽函数是在那个文件中调用的。 --------------------编程问答--------------------

引用 6 楼 ying_593254979 的回复:
Quote: 引用 5 楼 chenlingzhen 的回复:

Quote: 引用 4 楼 ying_593254979 的回复:

Quote: 引用 2 楼 chenlingzhen 的回复:

缺少宏定义
Q_OBJECT

没有这个宏。


要使用信号槽就得在类定义的时候加入Q_OBJECT,要不就得用
QObject::connect
不对啊。
这个宏跟QObject::connect没什么关系。可以看一下Qt元对象机制。这个宏和moc编译器会生成一些moc开头的文件。你的槽函数是在那个文件中调用的。


反正自定义的QT类如果要使用信号槽就把Q_OBJECT加上,不加八成出问题。 --------------------编程问答--------------------
引用 2 楼 chenlingzhen 的回复:
缺少宏定义
Q_OBJECT
就是这个原因 --------------------编程问答--------------------
引用 2 楼 chenlingzhen 的回复:
缺少宏定义
Q_OBJECT
  --------------------编程问答-------------------- 缺少宏定义
Q_OBJECT 
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,