В чем ошибка в моем коде? - PullRequest
0 голосов
/ 19 марта 2010

У меня есть следующий код:

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 ]

7 голосов
/ 19 марта 2010

Чтобы использовать механизм сигнала / слота, классы должны наследовать от QObject (либо напрямую, либо от подкласса QObject, например QWidget) и , чтобы объявить себя таковыми, используя Q_OBJECT macro.

Таким образом, и ваши mysignal, и myslot должны наследоваться от QObject.

Более того, вы должны поместить макрос сразу после открывающей скобки вашего класса, этодолжен дать:

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

class mysignal : public QObject
{
    Q_OBJECT
public:
// .../... 
};
0 голосов
/ 30 марта 2010

У вас проблемы с подключением сигнал / слот? Если да, то, возможно, вам следует сделать:

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

потому что вы объявили свои слоты с помощью myslot :: cars, а не myslot :: Emycars. Компилятор метаобъектов просто создает строки, связанные с вашими слотами, поэтому ваше соединение может не работать.

...