0

私はC++ライブラリを持っています。このライブラリは、publish-subscriber パターンを使用します。

namespace mylib {
typedef unsigned MyLibType;
class IEvent
{
    virutal ~IEvent() {}

    virtual void event1() = 0;
     virtual void event2(MyLibType) = 0;
};

class IMyClass
{
public:
    virtual ~IMyClass() {}

    // operations
};

} // mylib

// C interface
int CreateMyClass( mylib::IMyClass** class, mylib::IEvent* listener );

// implementation
class MyClass : public IMyClass { // ...

MyClass が作成されると、いくつかのイベントを生成するスレッドが使用されます。

今Qtで:

class QtMyApplication : public QMainWindow, public mylib::IEvent
{
    Q_OBJECT

public:
    explicit QtMyApplication(QWidget *parent = 0);
    ~QtMyApplication();

signals:
    void MyLibEvent1();
    void MyLibEvent2(mylib::MyLibType);

private slots:
    void OnMyLibEvent1();
    void OnMyLibEvent2(mylib::MyLibType);

private: // IEvent interface
    void event1()
    {
        emit MyLibEvent1();
    }

    void event2(mylib::MyLibType i)
    {
        emit OnMyLibEvent2( i );
    }

private:
    Ui::QtMyApplication* ui;
    mylib::IMyLib mMyLib;
};

// implementation
QtMyApplication::QtMyApplication( QWidget *parent ) :
    QMainWindow(parent),
    ui(new Ui::QtMyApplication)
{
    ui->setupUi( this );

    CreateMyLib( &mMyLib, this );

    connect( this, SIGNAL(MyLibEvent1()),
             this, SLOT(OnMyLibEvent1()) );
    connect( this, SIGNAL(MyLibEvent2(mylib::MyLibType)),
             this, SLOT(OnMyLibEvent2(mylib::MyLibType)) );
}

アプリケーションを実行すると、QtMyApplication 内で event2() が呼び出されますが、OnMyLibEvent2 は呼び出されず、代わりに event1() が呼び出され、OnMyLibEvent1 も呼び出されます。何が間違っていますか?引数パラメータが問題ですか?

編集 1

接続にはパラメーターにいくつかの制限があることがわかりました....すべてを変更MyLibEvent2(mylib::MyLibType)するとMyLibEvent2(int)正常に動作するためです...

4

1 に答える 1