簡體   English   中英

Qt由類成員發出的信號通知

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM