У меня есть библиотека C++. Эта библиотека использует шаблон публикации-подписчика.Qt connect не работает
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)));
}
При запуске приложения EVENT2() вызывается внутри QtMyApplication но OnMyLibEvent2 никогда не вызывается, а event1() вызывается и OnMyLibEvent1 называется тоже. Что я не так? Является ли параметр параметра проблемой?
редактировать 1
я обнаружил, что подключения имеет некоторое ограничение на Params .... потому что если я изменю MyLibEvent2(mylib::MyLibType)
в MyLibEvent2(int)
все работает правильно ...
возможно, событие2() никогда не называется? – codeling
Выполняется 'event2', и он вызывает' emit MyLibEvet2 (i) ', но' OnMyLibEvet2' никогда не называется –
еще одна странная вещь: Qt печатает: 'pc 0x400 в read в psymtab, но не в symtab.' на выходном окне –