是否有人试图调用重载运算符<<在QObject上。
例如我有一个班级
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') );
ErrorMessage将是:没有这样的方法Worker :: operator&lt;&lt;(char)(char)
答案 0 :(得分:0)
正如QMetaObject::invokeMethod
QMetaObject::invokeMethod( &worker,
"operator<<",
Qt::QueuedConnection,
Q_ARG( char, 'a') );
中所述:
您只需要将信号或插槽的名称传递给此功能, 不是整个签名。
invokeMethod
这应该足够了,尽管我之前从未见过moc
运算符。
修改强>
qDebug() << worker.metaObject()->indexOfMethod( "operator<<" );
似乎无法将运算符注册到元对象系统中,调用:
-1
将返回operator<<
。最好的办法是将Q_INVOKABLE
放在基类中,使其成为非虚拟的,并让它调用新的虚拟{{1}}方法或插槽。然后,派生类将重新实现新方法,该方法也可以通过元对象系统调用。