Qtablewidget选中多行并删除

4 篇文章 0 订阅

选中并删除多行代码如下(封装为一个删除函数)

void MainWindow:: OnDelete(QTableWidget* pTable) //传入表名
{
    if (!pTable) 
    {
        return;
    }
    std::vector<int> vecItemIndex;//用于保存选中行的行号
    QList<QTableWidgetItem*> selections = pTable->selectedItems();
//selectedItems();会选中表格每一项,就是每个小方格
    for (int i = 0; i < selections.size(); i++)
    {
        vecItemIndex.push_back(selections.at(i)->row());//存储选中的行

    }


    sort(vecItemIndex.rbegin(), vecItemIndex.rend());

    vecItemIndex.erase(std::unique(vecItemIndex.begin(), vecItemIndex.end()), vecItemIndex.end());//去除重复的行号
    //vecItemindex就存放着得到的行号
    int number =0 ;
        for (unsigned int k = 0 ; k < vecItemIndex.size(); k++)
        {
number=vecItemIndex[k];//存放获取到的行号
     int id=   ui->tableWidget->item(number,1)->text().toUInt();
     //因为删除函数是根据id来删除的,所以我们获取第二列id所在的列就行。
  m_ptrStuSql->delStu(id);
        }



}

删除选中单行的方法

   int i=ui->tableWidget->currentRow();

            if(i>=0)
            {
                int id=   ui->tableWidget->item(i,1)->text().toUInt();
                m_ptrStuSql->delStu(id);


                QMessageBox::information(this,"标题","删除成功");

            }

            UpdateTab();
            return QMainWindow::eventFilter(target, e);

删除方法delstu的代码

bool stuSql::delStu(int id)
{
    QSqlQuery sql(m_db);//执行sqllite语句前必须使用此句
    //注意字符串字段加引号
   auto ret= sql.exec(QString ("delete from student where id=%1").arg(id));




   qDebug()<<ret;
   return  0;

}
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用以下代码删除QTableWidget选中多行: ```python # 获取选中的行 selected_rows = [index.row() for index in self.tableWidget.selectedIndexes()] # 去重 selected_rows = list(set(selected_rows)) # 从后往前删除 selected_rows.sort(reverse=True) for row in selected_rows: self.tableWidget.removeRow(row) ``` 其中,self.tableWidget是QTableWidget对象。首先,获取选中的行,然后去重,最后从后往前删除每一行。 ### 回答2: QTableWidget 是 Qt 库中的一个用于展示表格数据的控件。有时候我们需要在 QTableWidget删除选中多行,这里介绍一种实现方法。 首先,我们需要获取当前选中的行号,然后逐行删除。 ```python # 获取当前选中的行号 selectedRows = self.tableWidget.selectedRanges() # 循环遍历选中的每一行 for range in selectedRows: for i in range.topRow(), range.bottomRow()+1: self.tableWidget.removeRow(i) ``` 以上代码中,`selectedRanges()` 方法会返回一个 QTableWidgetSelectionRange 的列表,表示当前选中的所有行、列范围。循环遍历这个列表,然后遍历每个范围的所有行,调用 `removeRow()` 方法逐行删除。 完整代码实现如下: ```python from PyQt5 import QtWidgets, QtGui, QtCore class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent) self.initUI() def initUI(self): self.tableWidget = QtWidgets.QTableWidget(4, 4) self.tableWidget.setHorizontalHeaderLabels(['列1', '列2', '列3', '列4']) self.tableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4']) self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) btn = QtWidgets.QPushButton('删除选中行') btn.clicked.connect(self.deleteSelectedRows) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.tableWidget) layout.addWidget(btn) self.setLayout(layout) def deleteSelectedRows(self): # 获取当前选中的行号 selectedRows = self.tableWidget.selectedRanges() # 循环遍历选中的每一行 for range in selectedRows: for i in range.topRow(), range.bottomRow()+1: self.tableWidget.removeRow(i) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` 以上代码实现了一个有 4 行 4 列的 QTableWidget选中多行后点击按钮可删除选中行。 ### 回答3: QTableWidget是Qt中常用的表格控件,可以实现数据的表格展示和编辑。在QTableWidget中,如果需要删除选中多行,可以按照以下步骤进行实现: 1. 获取当前选中的行数 ```python selected_rows = [] for item in table.selectedItems(): row = item.row() if row not in selected_rows: selected_rows.append(row) ``` 2. 根据选中的行数,逐一删除对应的行数据 ```python selected_rows.sort(reverse=True) # 倒序删除 for row in selected_rows: table.removeRow(row) ``` 完整代码示例: ```python def remove_rows(table): # 获取选中行数 selected_rows = [] for item in table.selectedItems(): row = item.row() if row not in selected_rows: selected_rows.append(row) # 倒序删除对应行 selected_rows.sort(reverse=True) for row in selected_rows: table.removeRow(row) ``` 调用remove_row函数即可删除选中多行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁金金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值