代码之家  ›  专栏  ›  技术社区  ›  mozcelikors

Qt通过类成员发出的信号得到通知

  •  1
  • mozcelikors  · 技术社区  · 6 年前

    Q_EMIT 由类成员发出的。我的示例代码如下:

    我的班级.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_changed Q_EMIT availableChanged(true) 无需修改 QOfonoManager

    任何帮助都非常感激。

    1 回复  |  直到 6 年前
        1
  •  3
  •   G.M.    6 年前

    我认为根本的问题是 connect 语句与的信号规范不匹配 QOfonoManager::availableChanged bool 参数。。。

    Q_EMIT availableChanged(true);
    

    但是你的connect语句声明它是一个没有参数的信号。。。

    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关于 连接 声明。建立联系是至关重要的 之前 发出信号,否则将错过通知。