如果单元格内有内容,可以使用函数selectedItems() 获取有内容行的一个链表
QList<QTableWidgetItem *> items =ui->qtableWidget->selectedItems(); //选中有内容的行可选择有内容的行int count = items.count();for(int i = 0 ; i < count; i++){ //删除里面有文字int row = ui->qtableWidget->row(items.at(i));ui->qtableWidget->removeRow(row);}
但是使用上面这种方法,无法删除选中的空白单元格。通过查看帮助文档可知
点击查看selectedIndexes()函数,如下
通过查看文档可知,这是个受保护的虚函数。本文的处理方法是在UI界面提升控件,自己写一个类继承QTableWidget,然后在自己写的从类里面使用public函数返回上面的受保护的虚函数返回的值。
提升UI控件参考这个帖子http://t.csdnimg.cn/BMLwz
下面是我对从类进行的处理
接着对拿到的数据进行处理。拿到的数据是一个一个的单位cell,不是一行一行的row。所以首先将这些cell得到其对应的row,然后把这些row使用哈希表存储。然后再遍历哈希表的键,就得到了我们要删除的row。但是因为删除的过程中QTableWidget的视图是动态变化的(本来有两行,先删除第一行,第二行就动态变成了第一行,所以要先删除第二行,再倒过来删除第一行)
因为我使用的QHash是一个无序的排列,所以这里使用了QLIst的sort函数,将其排序,然后倒过来遍历,在遍历中使用removeRow函数,实现了删除行的功能。
QModelIndexList modeItems =ui->qtableWidget->getList(); //获取选中的空白的行的链表QHash <int,int> empty_hash; //使用哈希表存储,只要键的row值for(int i=0; i<modeItems.size();i++){empty_hash.insert(modeItems[i].row(),i);}QList<int> keys = empty_hash.keys();std::sort(keys.begin(), keys.end());for(int i = keys.size();i != 0; --i){ //删除的时候行在动态变化,从上面反过来删除ui->qtableWidget->removeRow(keys[i-1]);qDebug() << keys[i-1];}empty_hash.clear();modeItems.clear();