Sadece Qt çerçevesinin garip bir davranışına rastladım ve Qml içerisindeki aşırı C++ yöntemlerini çağırırken ve arkasındaki sebebi anlamaya çalışırken.Qt/Qml ve yöntem aşırı yükleri
...
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 nasılsa
bir
boş null QVariant
QVariantList
ayarlı items
bağımsız değişkenle void insert(int index, const QVariantList &items)
aşırı çağırmak karar verir ı aşağıdaki yöntemlerle bir QList<QVariant>
benzeri sınıf var diyelim QVariant
void insert(int index, const QVariant &item)
yerine QString
yüklenmiştir. Ben bildirimleri sırasını değiştirirseniz aşağıdaki gibi
Şimdi, beklendiği gibi çalışır:
Q_SLOT void insert(int index, const QVariantList &items);
Q_SLOT void insert(int index, const QVariant &item);
Ben bildirimleri sırasına ilişkin Qt framework belgelerine altında bir şey bulamadı ve yöntemler çözülür yolunu nasıl etkilediğini çağırma sırasında.
Birisi lütfen açıklayabilir mi? Teşekkür ederim.
Özellikle javascript aşırı yükleme sisteminde bu davranışı kışkırttığını söyleyebilir misiniz? – UmNyobe
Denediğin için teşekkürler ... Çözüm aramıyordum ... Çözüm basit - sadece açıklamaların sırasını değiştir ... Anlamaya çalışıyorum (gelecekteki referans için) ve Qt neden yanlış aşırı yükü çağırmaya karar verdi? ve sadece veri tiplerini tamamen yok sayar. Sipariş değiştiğinde, doğru yöntem imzalarına çözüm bekleyen bir sorun yoktur. Yan notta, çözümünüz sınıfımı sadece belirli veri türlerini kabul edecek şekilde sınırlandırıyor. – gplusplus
Gerçekten de, bu ana soruya cevap vermiyor, yani * neden * davranış gerçekleşir. Buna bakmak için [eski taahhüt] (https://qt.gitorious.org/qt/tmartsums-qt/commit/1d7b672fd46abab51a0124ad19aad18e5d14f1a8) işe yaramayacak (görünür) bir sebep yok. Hata ?? – BaCaRoZzo