-1

我有以下代码:

class myslot
    {

public:
    Q_OBJECT

    myslot()
        {

        }
    ~myslot()
        {

        }

    typedef enum  Emycars{volvo,benz,tata}cars;


public slots: 
void hellowslot(myslot::cars);
    };

void myslot::hellowslot(myslot::cars cars1)
    {

    }


class mysignal
    {
public:
    Q_OBJECT

public:
      mysignal(myslot *ourslot)
          {

     bool val = QObject::connect(this,SIGNAL(hellowsignal(myslot::Emycars)),ourslot,SLOT(hellowslot(myslot::Emycars)));
          }
      ~mysignal()
          {

          }

signals: 
void hellowsignal(myslot::Emycars);


    };

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    myslot slot;
    mysignal sig(&slot);


   // DeleteNow w;
   // w.showMaximized();
    return a.exec();
}

我的代码有什么错误?我为接收枚举的函数编写连接的方式是否正确?

4

2 回答 2

7

为了使用信号/槽机制,类必须继承自QObject(直接或从 like 的子QObjectQWidget使用Q_OBJECT宏声明自己。

因此,您的mysignalmyslot必须继承自QObject.

此外,您必须将宏放在类的左大括号之后,这应该给出:

class myslot : public QObject
{
    Q_OBJECT
public:
// .../... 
};

class mysignal : public QObject
{
    Q_OBJECT
public:
// .../... 
};
于 2010-03-19T14:40:32.400 回答
0

您有信号/插槽连接问题吗?如果是,那么也许你应该这样做:

bool val = QObject::connect( this, SIGNAL(hellowsignal(myslot::cars)), ourslot, SLOT(hellowslot(myslot::cars)));

因为您使用 myslot::cars 而不是 myslot::Emycars 声明了您的插槽。元对象编译器只是创建与您的插槽相关的字符串,这就是您的连接可能无法正常工作的原因。

于 2010-03-30T06:51:43.090 回答