c++ - 如何将信号连接到一个类的所有实例的插槽

标签 c++ qt

我有一个简单的类,我将创建比方说该类的 100 个实例。

有没有办法在创建实例之前(因为一个一个地连接每个对象)显然是一项令人厌烦的工作)。

提前感谢任何想法,我很高兴欢迎任何不同的方法。

最佳答案

有一种简单的方法可以通过使用实例化类将自己连接到的单例类来实现:


将提供单一入口点的单例类:

class Linker : public QObject
{
    Q_OBJECT

public:
        static Linker * getInstance(QObject *parent = 0)
        {
           static Linker * instance = new Linker(parent);
           return instance;
        }

        sendSignal()
        {
            emit mySignal();
        }

 signals:
        void mySignal();
};

要实例化的类:

class ClassToBeInstencied  : public QObject
{
    Q_OBJECT

private slots:
    void mySlot() {}

public:

    ClassToBeInstencied() // constructor
    {
        connect(this, &ClassToBeInstencied::mySlot, Linker::getInstance(), &Linker::mySignal);
    }
};

这样做的好处是让您的代码保持干净和简单,因为您不必在类外部处理与信号/槽的连接,因此封装得很好。

您只需要创建一个新实例:

ClassToBeInstencied  * a = new ClassToBeInstencied();
ClassToBeInstencied  * b = new ClassToBeInstencied();
ClassToBeInstencied  * c = new ClassToBeInstencied();

连接会自动完成。

您可以直接向所有人发送信号:

Linker::getInstance()->sendSignal();

优点:没有列表,没有循环,不需要在类外管理,也不需要手动连接每个实例。

关于c++ - 如何将信号连接到一个类的所有实例的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059490/

相关文章:

c++ - 以最有效的方式合并 C++ vector 或类似数据结构中的某些元素

c++ - 继承和类型数组

python - 适用于 3dsMax 和 Modo 的 PySide 小部件

c++ - 如何访问由另一个函数作为指针返回的对象的函数。

c++ - 客户端不会与 ATL 服务对话

c++ - 将许多 vector 累积到一个容器中而无需复制

c++ - QSharedData 和运算符=

C++将两个QSliders加在一起?

c++ - 无法将 QButtonGroup buttonClicked 连接到仿函数

qt - 如何根据内容调整QTableView的高度?