2017-01-19 3 views
-1

мне было интересно, как же статический метод «fromValue» из работ QVariant, вот описание:Как работает QVariant :: fromValue?

Возвращает QVariant, содержащее копию значения. Ведет себя так же, как setValue().

Как возможно, что этот метод имеет два разных поведения в зависимости от того, был ли он вызван из экземпляра или из его статической версии? Потому что невозможно сделать нестатический метод с тем же прототипом другого статического метода, и я не вижу, как вы можете определить, как он был вызван внутри самого метода.

Меня интересует это, потому что я пытался сделать что-то подобное для тканевого метода.

+2

Вы неправильно понимаете текст. То, что вы цитируете, означает «он ведет себя точно так же, как setValue, за исключением того, что он возвращает QVariant ....». – Mat

ответ

0

QVariant::fromValue определяется как это следующим образом:

template<typename T> 
static inline QVariant fromValue(const T &value) 
{ return qVariantFromValue(value); } 

qVariantFromValue ниже:

template <typename T> 
inline QVariant qVariantFromValue(const T &t) 
{ return QVariant(qMetaTypeId<T>(), &t, QTypeInfo<T>::isPointer); } 

То есть точно так же, конструктор используется setValue внутренне при определенных обстоятельствах (см code для получения более подробной информации).

Из-за этого я бы сказал, что @Mat в комментариях почти прав, вы неправильно поняли документацию.
Вы должны достаточно прочитать его как:

Он ведет себя более или менее как setValue, но и за то, что она возвращает QVariant.

Дополнительную информацию см. Полный code.

Смежные вопросы