1

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 は次のようになります: No such method Worker::operator<<(char)(char)

4

1 に答える 1

0

のドキュメントに記載されているようにQMetaObject::invokeMethod

署名全体ではなく、シグナルまたはスロットの名前のみをこの関数に渡す必要があります。

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

invokeMethodこれで十分ですが、これまでオペレーターで使用されたことはありません。

編集

mocオペレータをメタオブジェクト システムに登録できず、以下を呼び出しているようです。

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

戻り-1ます。最善の方法は、あなたoperator<<を基底クラスに入れて非仮想にし、新しい仮想Q_INVOKABLEメソッドまたはスロットを呼び出すようにすることです。派生クラスは、メタオブジェクト システムを介して呼び出すこともできる新しいメソッドを再実装します。

于 2015-03-25T10:49:31.313 に答える