我的代码中有什么错误?

时间:2010-03-19 11:22:45

标签: qt qt4 symbian signals nokia

我有以下代码:

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();
}

我的代码中有什么错误?我是否已经为接收枚举权限的函数编写连接的方式是什么?

2 个答案:

答案 0 :(得分:7)

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

因此,mysignalmyslot都必须从QObject继承。

此外,你必须将宏放在你班级的开口大括号之后,这应该给出:

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

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

答案 1 :(得分:0)

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

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

因为你用myslot :: cars宣布你的老虎机而不是myslot :: Emycars。 Metaobject编译器只是创建与您的插槽相关的字符串,这就是为什么您的连接可能无法正常工作。