Можно ли внедрить наш собственный код в QVariant :: canConvert?Замена QVariant :: Handler :: canConvert
Я добавить поддержку для преобразования нашего собственной ценности универсального контейнера и версии Qt (QVariant), основанные главным образом на предложение здесь How to support comparisons for QVariant objects containing a custom type?
Я довольно уверен, что ответ на этот вопрос " это не может быть сделано », просмотр источника показывает, что реализация QVariant :: canConvert не вызывает в обработчике, но я думал, что я все равно спрошу из-за болезненного любопытства.
Есть ли случайное место в реализации QVariant, где мы можем получить какой-то крюк в этот вид функциональности (без перекомпиляции Qt), и если нет, то функция на Handler используется для чего/почему он существует? В основном - какие-либо предложения по работе вокруг этого?
Спасибо, это ответ на мой вопрос очень хорошо! – FrozenKiwi
Это «работает», но я предполагаю, что однажды можно специализировать, например, значение «()», иначе вы получите конфликты имен во время компиляции, поэтому нужно добавить все настраиваемые типы в одну специализацию? Кроме того, я предлагаю добавить 'canConvert' для ясности' template <> bool QVariant :: canConvert () const {if (userType() == QMetaTypeId ()) {return true; } else {return canConvert (qMetaTypeId ()); }} 'или иначе он прерывает все остальные вызовы' canConvert() ' –