Qt Get Notify по сигналу, испускаемому членом класса - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь повторно использовать библиотеку как модуль в 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.

Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 27 сентября 2018

Я думаю, что основная проблема заключается в том, что ваш оператор 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()));

Или, что еще лучше, используйте новый синтаксис сигнала / слота , если вы используете Qt5 ...

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

В дополнение к вышесказанному вы должны прислушаться к совету @scopchanov & @ixSci относительно размещения ваших connect заявлений.Крайне важно, чтобы соединения были установлены до того, как будут испущены сигналы, иначе уведомления будут пропущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...