gpt4 book ai didi

c++ - QMetaObject 调用重载运算符

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:56 25 4
gpt4 key购买 nike

有没有人试过在 QObject 上调用重载运算符 <<。

比如我有一个类(class)

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<<(char)(char)

最佳答案

docs 中所述对于 QMetaObject::invokeMethod :

You only need to pass the name of the signal or slot to this function, not the entire signature.

QMetaObject::invokeMethod( &worker,
"operator<<",
Qt::QueuedConnection,
Q_ARG( char, 'a') );

这应该足够了,尽管我从未见过 invokeMethod以前用在运算符上。

编辑

看来 moc无法将运算符注册到元对象系统中,调用:

qDebug() << worker.metaObject()->indexOfMethod( "operator<<" );

将返回 -1 .最好的办法是把你的 operator<<在基类中,使其成为非虚拟的,并让它调用一个新的虚拟 Q_INVOKABLE方法或插槽。然后派生类将重新实现也可以通过元对象系统调用的新方法。

关于c++ - QMetaObject 调用重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com