c++ - 将QMetaMethod作为参数传递给使用新QObject::connect语法的函数

标签 c++ qt

我想使用在编译时进行类型检查的新语法来围绕QObject的连接构建包装器。
主要思想是:“嘿听众,将此对象的插槽连接到我的newData信号上”

void Listener::_addClient(const QObject *object, const QMetaMethod& slot)
{
    connect(this, &Listener::newData, object, slot);
}

一些Client类可以简单地做到:
Listener myListener;
myListener._addClient(this, &Client::mySlot);

这当然不会编译。
  • 由于所有Listener对象将归管理类所有,因此我无法直接访问它们,因此无法进行传统连接。

  • 如何为该连接构建包装器,以便确保在编译时进行类型检查?

    最佳答案

    您可以使用模板:

    template <typename Receiver, typename Slot>
    void Listener::_addClient(const Receiver *object, const Slot& slot)
    {
        connect(this, &Listener::newData, object, slot);
    }
    

    关于c++ - 将QMetaMethod作为参数传递给使用新QObject::connect语法的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955390/

    相关文章:

    c++ - 点运算符可以将表达式作为右操作数吗?为什么?

    c++ - 向 C++ 应用程序添加 GUI 的最简单方法

    qt - 基于 QObject 的类具有与自身的排队连接

    c++ - LZW C++ 简单实现

    c++ - 构造函数不能用于初始化

    qt - 更改 QProgressBar 显示的文本

    c++ - QNetworkAccessManager 问题获取网页

    c++ - 在 QVTKWidget 渲染器中添加和删除 vtkChartXY/vtkContextView

    c++ - 行外成员定义的类型说明符中可以省略 typename 吗?

    c++ - 如何在具有 OpenMP 功能的 QThread 中强制使用多核