c++ - 根据多个信号运行一个函数

标签 c++ qt qt-signals

我有两个不一定同时收到的信号。

第一个信号

第一个信号由 MyClass 发出,并由 MyClass 的插槽处理:

QObject::connect(this, &MyClass::ready, 
                 this, &MyClass::handleReady);

void MyClass::handleReady()
{
    qDebug() << "Ready to do next step";
}

// ... somewhere in MyClass implementation, signal is emitted:
emit ready();

第二个信号

第二个信号由成员对象发出,并由 MyClass 的插槽处理:

QObject::connect(m_member, &MemberClass::enabledChanged, 
                 this,     &MyClass::handleEnabledChange);
//...
void MyClass::handleEnabledChange(const bool enabled)
{
    qDebug() << "Is member enabled?" << enabled;
}

我打算根据两个条件运行一些代码(如函数):

  1. 收到第一个信号,即 ready
  2. 接收到第二个信号,即 enabledChanged,其 bool 参数为 true

我不知道如何检查是否满足上述条件。

更新

现在我的信号数增加到三个。所以我的代码执行取决于三个条件。

最佳答案

在 MyClass 中编写一个方法,检查两个条件是否都为真,并在两个槽中调用该方法。使条件成为 myClass 的成员

bool MyClass::areBothConditionsTrue() {
    if(m_conditionA && m_conditionB)
        return true:
    return false;
}

void MyClass::handleReady()
{
    qDebug() << "Ready to do next step";
    m_conditionA = true;
    bool b = areBothConditionsTrue();
}

void MyClass::handleEnabledChange(const bool enabled)
{
    qDebug() << "Is member enabled?" << enabled;
    m_conditionB = enabled;
    bool b = areBothConditionsTrue();
}

进一步的代码取决于你想用这些信息做什么

关于c++ - 根据多个信号运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991137/

相关文章:

c++ - 如何为系统驱动器、文件夹和文件创建浏览器

c++ - 将 qnetworkaccessmanager 连接到插槽

c++ - 如何将附加数组传递给 Thrust 的 min_element 谓词

未调用的函数内的 C++ 变量声明会更改正常的应用程序流程

c++ - Qt-使用getline函数

c++ - QDomDocument - 如何从 QString 创建?

python - PyQt5中如何在线程之间传递数据?

c++ - QT/c++调用父方法的最佳方式

C++11 反向基于范围的 for 循环

C++ 并发修改和读取单个全局变量