Просто наткнулся на странное поведение Qt-структуры, вызывая перегруженные методы С++ из Qml и пытаясь понять причину этого. Скажем, у меня есть класс QList<QVariant>
-like со следующими методами:
...
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
, установленным в a пустым 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-структуре относительно порядка объявлений и как это влияет на способ решения методов во время вызова.
Может кто-нибудь объяснить? Спасибо.