• 1690阅读
  • 1回复

[提问]QTableView的元素切换怎么破 [复制链接]

上一主题 下一主题
离线clickto
 

只看楼主 倒序阅读 楼主  发表于: 2021-02-15
我想在编辑换行和退出当前tableview编辑(如鼠标切换焦点到其他控件)时发出信号,进行数据校验、提交等工作(即每编辑完一行后进行校验提交,不管后续是继续编辑另一行,还是直接退出当前表的编辑)。
目前想到的方法是在currentChanged里记录行号和两个QModelIndex的isvalid,现在发现两个问题
1、焦点切换出去后并没有进入currentChanged;
2、两个item切换的话,使用键盘的tab实现和使用鼠标点击实现,两者的实现并不一样:
    1)使用键盘的时候,currentChanged里的current和previous两个参数直接记录切换的两个item的index;打印的日志如下:
[ "11:00:19 153" ..\..\sgLibs\sgtableview.cpp : 396  on  currentChanged ] "tableView_gz" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< current is  QModelIndex(17,12,0x0,QSqlTableModel(0x6c3a040)) previous is  QModelIndex(17,8,0x0,QSqlTableModel(0x6c3a040)) valid is [ true , true ]

    2)使用鼠标点击切换的时候,中间会加一个invalid的状态,即current先切换为QModelIndex(-1,-1,0x0,QObject(0x0)),即invalid,然后马上又切换为实际的item的index,打印的日志如下:
[ "11:01:54 408" ..\..\sgLibs\sgtableview.cpp : 396  on  currentChanged ] "tableView_gz" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< current is  QModelIndex(-1,-1,0x0,QObject(0x0)) previous is  QModelIndex(19,2,0x0,QSqlTableModel(0x6b52c40)) valid is [ false , true ]
[ "11:01:54 408" ..\..\sgLibs\sgtableview.cpp : 396  on  currentChanged ] "tableView_gz" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< current is  QModelIndex(19,3,0x0,QSqlTableModel(0x6b52c40)) previous is  QModelIndex(-1,-1,0x0,QObject(0x0)) valid is [ true , false ]


请问:
这种情况下,我怎么实现我需要的功能?
离线gzfstudy

只看该作者 1楼 发表于: 2021-02-15
使用委托QStyledItemDelegate,在setModelData函数时进行数据校验、提交等工作
快速回复
限100 字节
 
上一个 下一个