[英]Qt Get Notified by a signal emitted by a class member
我試圖在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語句更改為以下內容應該有助於解決問題...
connect(this->manager, SIGNAL(availableChanged(bool)), this, SLOT(manager_available()));
或者,更好的是,如果您使用的是Qt5
,請使用新的信號/插槽語法 ...
connect(this->manager, &QOfonoManager::availableChanged, this, &MyClass::manager_available);
除了上述內容之外,您還應該聽取@scopchanov和@ixSci關於connect
語句位置的建議。 在發出信號之前建立連接至關重要,否則通知將被遺漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.