我正在尝试编写一个具有两个参数的方法:Q_PROPERTY名称(char *)和与之相关的QObject *,它们允许将Q_PROPERTY的notifySignal(如果存在)连接到或动态建立的插槽,该插槽将调用void slot(QVariant)。信号的签名可以根据参数的类型而变化。如何在Qt 5中实现?也许这是不可能的,但是当我不确定时,我不会停止搜索。所以我认为我有3个解决方案:使用旧的Qt连接方法从信号名称动态构建一个信号确切签名的插槽,并在其中调用方法(QVariant):connect(sender, SIGNAL (valueChanged(QString,QString)), receiver, SLOT (updateValue(QString)) );使用新的Qt 5连接系统:connect(sender, &Sender::valueChanged,receiver, &Receiver::updateValue );构建所有可以与QVariant一起使用的插槽签名。Althougt,我不知道如何动态创建一个插槽,该插槽调用第一个解决方案的指定方法;对于第二种解决方案,我不知道如何从notifySignal的void method(QVariant)检索函数指针;也许最后的解决方案是最好的方法,并且很容易实现,但是它似乎有点极端。你怎么看待这件事? 最佳答案 为了“动态构建插槽”,Qt中提供了专用API(查找QMetaObjectBuilder或类似的类)。但是,这不能解决连接问题。请注意,QObject::connect被重载以将QMetaMethod用作信号和插槽。因此,您可以轻松构建“接收器”类对象(仅记住它作用于哪个属性的目的):class Receiver : public QObject { Q_OBJECTpublic: explicit Receiver(const char *property, QObject *parent = 0) : QObject(parent), m_property(property) {}signals: void propertyChangedForObject(const char *property, QObject *object);public slots: void onPropertyChanged() { emit propertyChangedForObject(m_property, sender()); }private: const char * const m_property;};并将其连接到您的方法中。关于c++ - 如何建立一个通用方法,以将不同Q_PROPERTY类型的notifySignal连接到char * name属性的无效插槽(QVariant)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30886247/