C++ 重载运算符上的QMetaObject调用
是否有人尝试调用重载运算符,如forC++ 重载运算符上的QMetaObject调用,c++,qt,qmetaobject,C++,Qt,Qmetaobject,是否有人尝试调用重载运算符,如forQMetaObject::invokeMethod中所述: 您只需将信号或插槽的名称传递给此函数, 不是全部签名 将返回-1。最好的方法是将您的运算符放在函数名的前面。普通函数就是这样调用的。我尝试了你的建议,但仍然不起作用:QMetaObject::invokeMethod:没有这样的方法Worker::operator“你是关于函数名的,普通函数都是这样调用的。”什么?您可以直接呼叫操作员,因此(&worker)->操作员抱歉,英语不好。我的意思是你是对的
QMetaObject::invokeMethod
中所述:
您只需将信号或插槽的名称传递给此函数,
不是全部签名
将返回
-1
。最好的方法是将您的运算符放在函数名的前面。普通函数就是这样调用的。我尝试了你的建议,但仍然不起作用:QMetaObject::invokeMethod:没有这样的方法Worker::operator“你是关于函数名的,普通函数都是这样调用的。”什么?您可以直接呼叫操作员,因此(&worker)->操作员抱歉,英语不好。我的意思是你是对的,这通常适用于普通函数。但是,当您尝试使用重载运算符时,它找不到该方法。也许这与主运行中心和@GeneralFailure有关,你是对的!我已经添加了更多信息。好的,我会接受这个策略。但是,我不确定是否在基本运算符中
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = 0);
Q_INVOKABLE virtual void operator<<(char p);
};
QMetaObject::invokeMethod( &worker, QT_STRINGIFY2( operator<<(char) ), Qt::QueuedConnection, Q_ARG( char, 'a') );
QMetaObject::invokeMethod( &worker,
"operator<<",
Qt::QueuedConnection,
Q_ARG( char, 'a') );
qDebug() << worker.metaObject()->indexOfMethod( "operator<<" );