C++ Qt通过类成员发出的信号得到通知
我试图将库作为Qt中的一个模块重用,因此,我希望对它进行尽可能少的修改/修补。目标是由类成员发出的C++ Qt通过类成员发出的信号得到通知,c++,qt,C++,Qt,我试图将库作为Qt中的一个模块重用,因此,我希望对它进行尽可能少的修改/修补。目标是由类成员发出的Q_EMIT通知。我的示例代码如下所示: myclass.cpp public: MyClass::MyClass(QObject* parent) : QObject(parent) { this->manager = new QOfonoManager(this); } public slots: void MyClass::manager_available() { q
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()));
}
void QOfonoManager::onGetModemsFinished(QDBusPendingCallWatcher* watcher)
{
......
Q_EMIT availableChanged(true);
}
QOfonoManager::QOfonoManager(QObject *parent) :
QObject(parent),
d_ptr(new Private)
{
.....
}
当我调用MyClass::test
时,我希望成员类将availableChanged
信号发送到MyClass::available\u changed
。我在这里缺少什么,我可以使用Q\u EMIT availableChanged(true)
而不必修改QOfonoManager
代码吗
非常感谢您的帮助。我认为根本问题在于您的
connect
语句与QOfonoManager::availableChanged
的信号规范不匹配。信号通过bool
参数发出
Q_EMIT availableChanged(true);
但是你的connect语句声明它是一个没有参数的信号
connect(this->manager, SIGNAL(availableChanged()), this, SLOT(manager_available()));
(您在控制台上没有收到错误消息吗?类似于“QObject::connect:没有这样的信号…”
?)
将connect语句更改为以下内容应有助于解决此问题
connect(this->manager, SIGNAL(availableChanged(bool)), this, SLOT(manager_available()));
或者,如果您使用的是Qt5
,则最好使用
connect(this->manager, &QOfonoManager::availableChanged, this, &MyClass::manager_available);
除上述内容外,您还应注意@scopchanov&@ixSci关于
connect
语句放置的建议。重要的是在发出信号之前建立连接,否则通知将丢失。因此执行onGetModemsFinished
方法中的代码,但看不到插槽中的输出?QOfonoManager
不是我写的,但我希望它的Q\u EMIT
通知我。因为这指示了调制解调器搜索完成的时间,所以我可以在该时间获取该信息。将MyClass
的构造函数中的connect
移动到this->manager=new QOfonoManager(this)之后代码>。我理解,但您可以确保调用QOfonoManager
中的代码,只需使用调试器并进行检查。也有可能代码是在连接建立之前执行的,所以上面关于移动连接的建议是调查可能问题的一个良好开端。我将很快对此进行研究,感谢所有的帮助answers@scopchanov修正了。非常感谢@G.M.解决了我的问题。同样感谢斯科普切诺夫的建议,这也是值得注意的。