Qt中并没有可以直接删除QTableView中的某个代理的功能,但我们可以使用QTableView原本默认的代理来替换后期我们自定义的代理,以此来实现删除自定义代理功能
QAbstractItemDelegate* defaultdelegate = table->itemDelegateForRow(0);
int rows = charModel->rowCount();
for(int loop = 1; loop < rows ;loop ++)
{
QAbstractItemDelegate* nowdelegate = table->itemDelegateForRow(loop);
showComboxItemDelegate* showdelegate = static_cast<showComboxItemDelegate*>(nowdelegate);
if(showdelegate) //表示当前的代理是自定义的代理
{
table->setItemDelegateForRow(loop,defaultdelegate);
}
}
table是我的表格QTableView对象,charModel是table的model对象,我的表格中第一行是确定不会添加自定义代理的,所以就获取第一行的代理作为默认代理。
showComboxItemDelegate* showdelegate = static_cast<showComboxItemDelegate*>(nowdelegate);这一句代码就是要将获取到的本行的代理类型强制转化为我自定的代理类类型showComboxItemDelegate,如果转化之后的showdelegate值不为0,则说明本行的代理就是自定义代理类型,若转化后的对象showdelegate值为0则表示该行代理不是自定义代理类型(showComboxItemDelegate)。