获取QTableWidget中所有已选行的行号

本文介绍了一种从 PyQt 的 QTableWidget 中获取已选中行的方法。通过遍历选定的项并记录它们所在的行,可以确保不会重复选择同一行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def getRow(self):
        self.selectedRow = list()
        item = self.`qtablewidget`.selectedItems()
        for i in item:
            if self.`qtablewidget`.indexFromItem(i).row() not in self.selectedRow:
                self.selectedRow.append(self.`qtablewidget`.indexFromItem(i).row())
<think>根据用户的问题,用户想要在QTableWidget中插入一,然后遍历这一的每一列并设置值为0。参考引用[2],我们可以动态地插入和列。对于插入新,我们可以使用insertRow()方法。然后,用户需要遍历新插入的每一列并设置值为0。由于表格可能有不同数量的列,我们可以使用columnCount()方法获取列数。接着,遍历每一列,创建QTableWidgetItem并设置其值为0,然后使用setItem()方法将其设置到对应的单元格。具体步骤:1.插入新,比如在最后插入一:tableWidget->insertRow(tableWidget->rowCount());或者指定位置插入,这里用户没有指定,假设在最后插入。2.获取新插入索引,比如新在最后,那么索引就是rowCount()-1。3.遍历每一列(从0到columnCount()-1),对每一列执:-创建一个新的QTableWidgetItem,设置其文本为"0"-使用setItem(row,col,item)设置单元格但注意,如果表格原本没有列,那么需要先添加列。不过根据引用[2],用户可能已经根据需要添加了列。如果没有,则需要先添加列。另外,根据引用[3]中的注意点:如果我们在遍历过程中删除,需要注意行号的变化。但是这里我们是插入并设置,所以没有删除操作,相对安全。代码示例:```cpp//假设在最后插入一intnewRow=tableWidget->rowCount();tableWidget->insertRow(newRow);//遍历所有列intcolCount=tableWidget->columnCount();for(intcol=0;col< colCount;++col){//创建一个新的表格项,设置文本为"0"QTableWidgetItem*item=newQTableWidgetItem("0");//将表格项设置到新的对应列tableWidget->setItem(newRow,col,item);}```注意:如果表格中列数可能为0,那么循环不会执,这样新就是空的,符合预期。用户问题中没有提到表头,所以这里不处理表头。另外,如果用户想在表头添加复框,可以参考引用[4],但这不是当前问题所关注的。总结:插入新,然后遍历每一列,创建并设置表格项。现在,根据用户要求,生成相关问题:</think> ### 解决方案:在QTableWidget中对新插入设置默认值 #### 1. **插入新并遍历设置初始值** 当向`QTableWidget`插入新后,可按以下步骤将整值初始化为0: ```cpp // 在最后插入新 int newRowIndex = tableWidget->rowCount(); // 获取索引 tableWidget->insertRow(newRowIndex); // 遍历所有列设置初始值 int colCount = tableWidget->columnCount(); // 获取列总数 for (int col = 0; col < colCount; ++col) { // 创建单元格项并设置值 QTableWidgetItem* newItem = new QTableWidgetItem(); newItem->setData(Qt::DisplayRole, "0"); // 设置为字符串"0" tableWidget->setItem(newRowIndex, col, newItem); // 放置到指定位置 } ``` **关键点说明**: - `rowCount()`获取数,插入后新索引即为该值[^2] - `columnCount()`动态获取列数,避免硬编码列索引[^2] - `setItem()`保证/列坐标在有效范围内:$0 \leq \text{row} < \text{rowCount}$, $0 \leq \text{col} < \text{columnCount}$[^1] #### 2. **动态插入时的安全控制** ```cpp // 安全删除或插入列的方法 void safeInsertRow(QTableWidget* table, int row) { if(row >= 0 && row <= table->rowCount()) { table->insertRow(row); // 安全插入 } } // 示例调用 safeInsertRow(tableWidget, 2); // 在第2插入新[^2] ``` #### 3. **设置表头复框(可扩展)** 如需在表头添加复框: ```cpp // 在水平表头插入复QTableWidgetItem* headerItem = new QTableWidgetItem(); headerItem->setCheckState(Qt::Unchecked); // 初始未选中 tableWidget->setHorizontalHeaderItem(0, headerItem); // 设置到第0列[^4] ``` ### 关键注意事项 1. **索引有效性**: - 使用前必须检查:$0 \leq \text{rowIndex} < \text{rowCount()}$ - 使用$0 \leq \text{colIndex} < \text{columnCount()}$保证列有效性 2. **性能优化**: ```cpp tableWidget->setUpdatesEnabled(false); // 暂停界面刷新 // 批量插入操作... tableWidget->setUpdatesEnabled(true); // 完成后再刷新 ``` 3. **逆序删除**: ```cpp // 倒序删除避免索引错乱(如删除所有) for(int r = tableWidget->rowCount() - 1; r >= 0; --r) { tableWidget->removeRow(r); } // 逆序操作避免后续索引变动[^3] ``` > **完整示例**:[GitHub示例代码](https://github.com/qt/qtdemo/blob/master/itemviews/tablewidget/main.cpp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值