Qt SQL:如何区分double和int?

时间:2015-10-21 20:54:18

标签: c++ qt integer double

我在Qt中使用SQLite数据库。在用信息填充QTableWidget时,我想检查作为QVariant接收的值是整数,双精度还是字符串:

// query something here, put in in var named 'query'
while(query.next()){
    // insert new row
    for (int i=0; i<columnCount; i++){
        if(query.value(i).toInt()!=0){
            //add integer table item with special sorting/formatting 
        }else if(query.value(i).toDouble()!=0){
            //add double table item with special sorting/formatting
        }else {
            //add standard qt table item
        }
    }
}

问题是当使用 toInt()时,double会被转换为整数,反之亦然,这就是为什么所有数值都被视为整数或全部被视为双精度,取决于你是哪一个先测试一下。

是否有可能正确检查数字是双数还是整数?

2 个答案:

答案 0 :(得分:2)

要测试存储在QVariant中的确切类型,您可以使用type()功能,然后启用它:

switch(query.value(i).type()) {
case QMetaType::Int:
    // ....
    break;
case QMetaType::Double:
    // ...
    break;
}

可以找到类型here

另外,也许@ Victor的答案有其优点 - 我不确定QtSQL如何处理这些类型。

答案 1 :(得分:1)

您必须向sqlite_master查询元数据。

您应该对字段type运行单独的查询,条件name为字段名称,tbl_name为表名。

请参阅此处了解可用的字段类型:

SQLite Frequently Asked Questions