-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(直接またはQObjectlikeのサブクラスからQWidget)継承し、マクロを使用してそれ自体宣言する必要があります。Q_OBJECT

したがって、 と の両方が から継承する必要がありmysignalます。myslotQObject

さらに、クラスの左中括弧の直後にマクロを配置する必要があります。これにより、次のようになります。

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::Emycars ではなく、myslot::cars でスロットを宣言したためです。メタオブジェクト コンパイラは、スロットに関連する文字列を作成するだけなので、接続が機能しない可能性があります。

于 2010-03-30T06:51:43.090 に答える