我有一个运行良好的应用程序,但未在打开警告的情况下进行编译。我正在尝试重新打开它并对其进行排序,但是关于如何解决此问题的想法已用尽。我有 :
QVariant someVar
QVariant::Type variantType = someVar.type();
switch (variantType) {
case QMetaType::QString:
doSomething1();
break;
case QMetaType::Float:
doSomething2();
break;
}
并得到以下警告/错误:
error: case value ‘135’ not in enumerated type ‘QVariant::Type’ [-Werror=switch]
在QMetaType::Float行中。我检查了QT文档,并将QMetaType::Float列为值38。这可能是什么引起的?
我可以找到的最接近的东西是https://github.com/qbittorrent/qBittorrent/issues/2510,它具有相同的错误。有人遇到过吗?
最佳答案
Qt在这两个枚举(QMetaType::Type
和QVariant::Type
)之间起到了一些肮脏的把戏。在QVariant::type()
上引用4.8.4文档:
换句话说,函数QVariant::type()
返回类型为QMetaType::Type
的QVariant::Type
的值,并且这两个枚举共享很多(但不是全部)枚举。这使得在严格类型系统中与它们打交道变得很困难-它们基本上是摇摆不定的,打字过的,摇摆不定的东西。
在您的情况下,请注意,枚举器QMetaType::Float
是在QVariant::Type
中没有直接等效项的枚举器。
我想说,使警告静音的最佳方法是将variantType
更改为QMetaType::Type
,可能在初始化时进行强制转换和/或在必要时引用Qt docs的注释。
关于c++ - QMetaType::Float不在QVariant::Type中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31290606/