gpt4 book ai didi

c++ - 在信号槽机制与传统循环之间做出决定

转载 作者:行者123 更新时间:2023-12-01 03:05:19 24 4
gpt4 key购买 nike

我想更新许多对象。我可以选择使用传统的 循环 像:


void ParentClass::updateItems(const float factor)
{
for (Item *item : items()) {
item->update(factor)
}
}


... 或者我可以使用 信号槽 机制如:

class ParentClass : public QObject
{
Q_OBJECT

Q_SIGNALS:
// The signal which will be emitted by parent:
void updateNeeded(const float factor);

private:
void updateItems(const float factor);
}

// Signal is emitted here
void ParentClass::updateItems(const float factor)
{
emit updateNeeded(factor);
}


class Item : public QObject
{
Q_OBJECT

Item(ParentClass *parent) : QObject()
, m_parent(parent)
{
// Connect parent signal to each item slot at each item constructor
QObject::connect(m_parent, &ParentClass::UpdateNeeded,
this, &Item::handleUpdate);
}

public Q_SLOTS:
void handleUpdate(const float factor);

private:
ParentClass *m_parent;
}


// The slot which handles emitted signal:
void Item::handleUpdate(const float factor)
{
this->update(factor);
}

  • 我已经测试了 循环 方法,它的工作原理。
  • 我在考虑 信号槽 机制,也许它对复杂的代码有一些好处。
  • 我想知道哪种方法应该如何完成,或者有更好的方法吗?


  • 写完我的问题后,我发现 this post这真的很有帮助,但我不确定它是否与我的问题直接相关。

    最佳答案

    随时随地使用基于循环的方法,KISS

    信号槽 是一种非常松散耦合的接口(interface)方法 - 虽然有时这可能很棒(主要是在其他选项不可行时..)它比常规函数调用更脆弱。

    关于c++ - 在信号槽机制与传统循环之间做出决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58285652/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com