我试图阅读一些关于从枚举值隐式创建QVariants的示例代码。 关于以下代码行:
QVariant::fromValue<Qt::PenStyle>(Qt::SolidLine)
我真的不明白上面表达式中 Qt :: PenStyle 的目的是什么。 我认为Qt :: SolidLine是独一无二的。 语法还可以吗? 不应该是这样的:
QVariant::fromValue(Qt::SolidLine)
? 对不起,这个问题似乎很愚蠢。
答案 0 :(得分:2)
您可以使用此表单:
1) QVariant::fromValue(Qt::SolidLine)
QVariant::fromValue(const T & value)
是一种template方法。调用模板方法或函数时,可以指定应该调用此方法的参数类型。如果您不这样做,编译器会尝试为您执行此操作。这就是1)等于这个原因:
2) QVariant::fromValue<Qt::PenStyle>(Qt::SolidLine)
但您可以为int
调用此方法并传递enum value
(如果您不在c ++ 11 ,则为):
3) QVariant::fromValue<int>(Qt::SolidLine)
甚至强制创建QPen
:
4) QVariant::fromValue<QPen>(Qt::SolidLine)
编辑:
如果有人对4感到惊讶并想知道它是如何工作的:它就像有一个方法一样(实际上它是在编译期间创建的):
QVariant::fromValue(const QPen& pen);
当您使用Qt::SolidLine
调用此方法时,编译器使用隐式构造函数QPen(Qt::PenStyle style)
来创建新的临时QPen
对象,并将其作为参数传递给方法fromValue
。