gpt4 book ai didi

c++ - Qt 获取由类成员发出的信号通知

转载 作者:行者123 更新时间:2023-11-30 02:18:12 25 4
gpt4 key购买 nike

我正在尝试将一个库作为 Qt 中的一个模块重用,因此,我希望尽可能少地对其进行修改/修补。目标是由类成员发出的 Q_EMIT 通知。我的示例代码如下:

myclass.cpp

public:
MyClass::MyClass(QObject* parent) : QObject(parent)
{
this->manager = new QOfonoManager(this);
}

public slots:
void MyClass::manager_available()
{
qDebug() << "Manager available";
QStringList modems = this->manager->modems();
qDebug() << "Modems:" << modems << "-" ;
}

public:
void MyClass::test()
{
QStringList modems = this->manager->modems(); //Starts getting available modems

connect (this->manager,SIGNAL(availableChanged()),this,SLOT(manager_available()));

}

qofonomanager.cpp

void QOfonoManager::onGetModemsFinished(QDBusPendingCallWatcher* watcher)
{
......
Q_EMIT availableChanged(true);

}


QOfonoManager::QOfonoManager(QObject *parent) :
QObject(parent),
d_ptr(new Private)
{
.....
}

当我调用 MyClass::test 时,我希望成员类将 availableChanged 信号发送给 MyClass::available_changed。我在这里缺少什么,我可以使用 Q_EMIT availableChanged(true) 而不必修改 QOfonoManager 代码。

非常感谢任何帮助。

最佳答案

我认为潜在的问题是您的connect 语句与QOfonoManager::availableChanged 的信号规范不匹配。信号使用 bool 参数发出...

Q_EMIT availableChanged(true);

但是您的连接语句声明它是一个没有参数的信号...

connect(this->manager, SIGNAL(availableChanged()), this, SLOT(manager_available()));

(您没有在控制台收到错误消息吗?类似于 "QObject::connect: No such signal ..." 的内容?)

将连接语句更改为以下应该有助于解决问题...

connect(this->manager, SIGNAL(availableChanged(bool)), this, SLOT(manager_available()));

或者,更好的是,使用 new signal/slot syntax如果您使用的是 Qt5...

connect(this->manager, &QOfonoManager::availableChanged, this, &MyClass::manager_available);

除上述内容外,您还应听取@scopchanov 和@ixSci 关于放置connect 语句的建议。在发出信号之前建立连接至关重要,否则将错过通知。

关于c++ - Qt 获取由类成员发出的信号通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52537999/

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