gpt4 book ai didi

c++ - Qt 连接不起作用

转载 作者:行者123 更新时间:2023-11-28 07:21:57 24 4
gpt4 key购买 nike

我有一个 C++ 库。该库使用发布-订阅模式。

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。我错了什么? argument 参数是问题所在吗?

编辑 1

我发现连接对参数有一些限制....因为如果我在 MyLibEvent2(int) 中更改 MyLibEvent2(mylib::MyLibType) 一切正常...

最佳答案

您需要将您的数据类型注册到 QTs 元类型系统以使其工作:

qRegisterMetaType<mylib::MyLibType>();

QTs 元类型系统不知道 typedef,因此不知道如何传输 mylib::MyLibType。我不太确定你是否也需要 Q_DECLARE_METATYPE(mylib::MyLibType),如果没有成功,请尝试一下。

如果您使用 QT5 的新连接语法,那么它也可以在没有任何额外努力的情况下工作。

connect( this, &QtMyApplication::MyLibEvent2,
this, &QtMyApplication::OnMyLibEvent2);

问题是旧的连接语法围绕元数据系统和字符串比较工作并且相当脆弱。如果您决定将插槽更新为 void OnMyLibEvent2(::mylib::MyLibType)

,它也将不起作用

关于c++ - Qt 连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19318759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com