• 7800阅读
  • 9回复

QSqlQueryModel中的double类型默认采用了科学计数法,如何禁用? [复制链接]

上一主题 下一主题
离线anubiskong
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-13
— 本帖被 XChinux 执行加亮操作(2011-01-13) —
如题
离线XChinux

只看该作者 1楼 发表于: 2011-01-13
从QSqlQueryModel派生一个类,然后重新实现data()方法,将数值类型的列自定义重新格式化返回。下面是一个示例:

QVariant ChaoZhuan_QueryForm_SqlQueryModel::data(const QModelIndex & index, int role) const
{
    QVariant value = QSqlQueryModel::data(index, role);
    if (value.isValid() && role == Qt::DisplayRole)
    {
            switch (index.column())
            {
                case 3:
            value = (value.toInt() == 1 ? "男" : "女");
                    break;
                case 7:
            value = (value.toInt() == 1 ? "市接收部门" : "区接收部门");
                    break;
                case 4:
                case 5:
                case 18:
                    value = value.toDate().toString("yyyy-MM-dd");
                    break;
                default:;
            }
        return value;
    }

    if (role == Qt::TextAlignmentRole && index.column() == 8)
    {
        value = (Qt::AlignVCenter + Qt::AlignRight);
        return value;
    }

    return value;
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线anubiskong

只看该作者 2楼 发表于: 2011-01-14
回 1楼(XChinux) 的帖子
还没看代码,不过感觉会好用
谢谢指导,十分感谢
离线anubiskong

只看该作者 3楼 发表于: 2011-01-14
回 1楼(XChinux) 的帖子
我看完了代码,重写data没有问题了,但是现在的问题是,我应该怎么格式化数据的格式?让qt放弃科学计数double型数据?
离线anubiskong

只看该作者 4楼 发表于: 2011-01-15
回 1楼(XChinux) 的帖子
QVariant PaceSqlTableModel::data(const QModelIndex &index,int role) const{
    QVariant value = QSqlQueryModel::data(index, role);
    if (value.isValid() && role == Qt::DisplayRole){
        if(index.column() == 12){
            value = (QString("%1").arg(value.toDouble(), 0, 'f', 2));
        }
    }
    return value;
}


我暂时这样写代码,把double变成string来编辑,我发现model可以自动的把String转换成double存入数据库,不过我感觉这样只是偏方...
离线anubiskong

只看该作者 5楼 发表于: 2011-01-15
回 1楼(XChinux) 的帖子
我又试着在我改变显示方式的那个列里面写2个小数点,不让我写,貌似model还是知道那个值是double类型,即使我在data里面把它变成String
实际上根本没变成String吧....那么data的作用到底是...
离线XChinux

只看该作者 6楼 发表于: 2011-01-15
本来在界面上显示的就都是字符串,double型的数据,你不处理,它在界面上显示的时候还不是要自动转换成字符串来显示吗?你现在要做的就是要自己控制显示格式而已.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线anubiskong

只看该作者 7楼 发表于: 2011-01-15
回 6楼(XChinux) 的帖子
那你看我的那种改法合适吗?我怎么感觉有点不妥
离线XChinux

只看该作者 8楼 发表于: 2011-01-15
没什么不妥.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线fzx374

只看该作者 9楼 发表于: 2011-03-17
double转成字符串可以,能达到目的,但有负作用呀。我印象中,转成字符串,会影响排序,不是按数值,而是按字母。比如从小到大排,11111会排在8前头,
快速回复
限100 字节
 
上一个 下一个