Qml 内からオーバーロードされた C++ メソッドを呼び出し、その背後にある理由を理解しようとしているときに、Qt フレームワークの奇妙な動作に遭遇しました。QList<QVariant>
次のメソッドを持つ のようなクラスがあるとします。
...
Q_SLOT void append(const QVariant &item);
Q_SLOT void append(const QVariantList &items);
Q_SLOT void insert(int index, const QVariant &item);
Q_SLOT void insert(int index, const QVariantList &items);
...
Qml:
onclicked: {
var itemCount = myListObject.size();
myListObject.insert(itemCount, "Item " + (itemCount + 1));
}
Qt はどういうわけか、ラップされたオーバーロードではなく、引数が空に設定されたvoid insert(int index, const QVariantList &items)
オーバーロードを呼び出すことにしました。items
null QVariant
QVariantList
void insert(int index, const QVariant &item)
QString
QVariant
次のように宣言の順序を変更すると、期待どおりに動作します。
Q_SLOT void insert(int index, const QVariantList &items);
Q_SLOT void insert(int index, const QVariant &item);
宣言の順序と、それが呼び出し中にメソッドが解決される方法にどのように影響するかに関するQtフレームワークのドキュメントの下には何も見つかりませんでした。
誰か説明してくれませんか?ありがとうございました。