网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月31日漏签0天
qt吧 关注:49,713贴子:159,092
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 10回复贴,共1页
<<返回qt吧
>0< 加载中...

Qt讨厌的科学计数法

  • 只看楼主
  • 收藏

  • 回复
  • fzx0374
  • 核心吧友
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Qt下,如果一个double数据>=1000000,则将会用科学计数法表示。对于单个数据,可以转换成QString形式,但于QTableView、QTableWidget表格来说,就令人讨厌。虽然单元格数据可转换为QString形式显示,但可能带来排序新问题。
该问题根源在于C++。百度几天,挖遍相关帖子,无数次偿试,无果。
无意间,神奇发现想要的结果,然后步步追踪,终于搞定。方法非常简单,就是增加一个空的QItemDelegate代理。形式:tableView->setItemDelegate(new QItemDelegate);
高手能解释为什么吗?我是搞不明白。


  • LingByron
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
遇到过这种问题,代理可以解决,也可以重写排序算法


2025-05-31 22:46:40
广告
  • Reset月
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
试了楼主的方法,居然真的可以,但也只是10位数,超过了仍然科学计数.多谢!!


  • 刘典武X
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
确实我也遇到了这个问题,ui->tableView->setItemDelegateForColumn(0, new QItemDelegate);这样就行


  • 刘典武X
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
QVariant DbPageModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlQueryModel::data(index, role);
//超过100万的数值会被科学计数显示需要这里转成字符串显示
if (role == Qt::DisplayRole) {
int result = value.toInt();
if (result >= 1000000) {
value = QString::number(result);
}
}
return value
}


  • 1-10字之间啊尼玛
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我也遇到了同样的问题,用的pyside6
表格'重量'和'价格'列的值用的double类型,
在QDoubleSpinBox中取值和赋值一切都正常
并且QTableWidgetItem使用了.setData(Qt.ItemDataRole.EditRole, data)方法
最开始发现当数值小于一万,比如9999.11时,在表格列里显示完整,
但是当数值大于一万时,就会存在四舍五入的情况,
比如10000.11在表格列里会显示成10000.1,
比如10000.15在表格列里会显示成10000.2
还有一种特殊情况,不知道是不是我理解有问题,
比如10000.05在表格列里会直接显示成10000,不会是预料的10000.1
10000.06时才会在表格列里显示10000.1
没看到QTableWidgetItem里面有相关的取消科学记数的方法
使用 [item.data() for item in self.selectedIndexes()]
和 [item.text() for item in self.selectedItems()] 查看数据时和数据库保存的数据一致,
就只是在表格列中显示有问题,如果QTableWidgetItem使用setText()设置值,
在表格列中显示就不会存在这些问题,但是后期在赋值和取值时还要转换一下,
表格列排序也会出现问题,比如说升序排序,100会排在在10和12之间等问题
还要从数据库重新调数据根据QHeaderView的排序符手写排序,简直是多此一举
最后还是按楼主的方法达到了预期要求
对相关列设置QItemDelegate对象
self.setItemDelegateForColumn(self.header_list.index("物品重量(kg)"), QItemDelegate(self))
# self.setItemDelegateForColumn(self.header_list.index("物品价值(元)"), QItemDelegate(self))


  • 戏言zare
  • 吧主
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
更简单的可以重写qtablewidget的data方法


  • 济南大雄
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
omg,真的好用,太感谢了。
我使用pyqt,在解决这些问题时更是摸不着头脑。多谢楼主的无私分享!
我的pyqt代码:
tableview_s.setItemDelegate(QItemDelegate())


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 10回复贴,共1页
<<返回qt吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示