gpt4 book ai didi

c++ - 私有(private)QT信号

转载 作者:行者123 更新时间:2023-11-30 02:55:24 27 4
gpt4 key购买 nike

我有一个数据模型,我希望其他对象能够监视更新,但我不想让任何人控制更新信号本身。我想出了一个在概念上对我有意义的东西,但它似乎不起作用。我想知道是否有人可以解释为什么我永远无法让它工作,或者我是否遗漏了一些可以使它工作的东西。实际上,我有一个具有任意插槽的客户端类 (QObject) 和具有私有(private)信号的模型类。

重要的客户端类代码(公共(public)SLOT):

void client::doUpdate()
{
std::cout << "HELLO UPDATE" <<std::endl;
}

模型代码:

void Model::unRegisterForUpdates(const char* qt_slot_handle, QObject* o)
{
QObject::disconnect (this, SIGNAL( updateHandles() ),
o, qt_slot_handle);
}

void Model::registerForUpdates(const char* qt_slot_handle, QObject* o)
{
QObject::connect( this, SIGNAL( updateHandles() )
, o, qt_slot_handle
, Qt::UniqueConnection);
}

主要功能:

Model foo;
client * cl = new client();
client * cl2 = new client();
std::cout << SLOT(cl->doUpdate()) << std::endl;
std::cout << SLOT(cl2->doUpdate()) << std::endl;
foo.registerForUpdates( SLOT(cl->doUpdate()) , cl);
foo.registerForUpdates( SLOT(cl2->doUpdate()) , cl2);

输出:

1cl->doUpdate()
1cl2->doUpdate()
Object::connect: No such slot client::cl->doUpdate() in .../main.cpp:14
Object::connect: No such slot client::cl2->doUpdate() in .../main.cpp:15

这可能会归结为我可以进入信号/槽系统的内省(introspection)量。我不确定如何解释连接错误消息。它告诉我 connect 与类 Client 的静态信息有关,但插槽字符串指示特定的实例名称 - 我想知道当我到达 Model::connectHandle() 时这个名称是否失去了意义。

最佳答案

这是一个简单的拼写错误:

在类里面,你有 doUpdate() 插槽。

在 main 函数中,您将 onUpdate() 传递给 SLOT() 宏。

此外,您不应在 SLOT() 宏中包含实例,而应仅包含插槽名称(和参数)。与您在 connect() 中使用的语法完全相同。 Qt 的信号槽连接机制是基于字符串比较的。换句话说,您的 main 应该这样做:

foo.registerForUpdates(SLOT(doUpdate()), cl);
foo.registerForUpdates(SLOT(doUpdate()), cl2);

关于c++ - 私有(private)QT信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487533/

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