tableWidget无法选中单元格问题

2 篇文章 0 订阅
1 篇文章 0 订阅

前因:
我弄了一个界面程序,可以在界面上修改tableWidget单元格的内容,但是每次改一个就需要点一下单元格,非常不方便,所以我想到了setCurrentCell()方法,但是效果却没达到。

根因:
我这个界面程序还要其它控件,导致焦点并不在tableWidget,所以加上self.tableWidget.setFocus()问题就解决了。

    def nextPosition(self):
        self.tableWidget.setFocus()
        if self.tableWidget.currentRow() < 35:
            self.tableWidget.setCurrentCell(self.tableWidget.currentRow() + 1, self.tableWidget.currentColumn())
        else:
            self.tableWidget.setCurrentCell(self.tableWidget.currentRow(), self.tableWidget.currentColumn())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Qt TableWidget的合并行单元格选中合并后的行,可按照以下步骤进行: 1. 首先,需要自定义一个QTableWidgetItem类,用来表示合并后的单元格。该类可以继承自QTableWidgetItem,并添加一个属性,用来记录该单元格所合并的行数。 2. 接着,在TableWidget中,需要重写setItem()函数,以便在设置单元格时,判断该单元格是否需要合并。如果需要合并,则创建一个自定义的QTableWidgetItem对象,并将其添加到TableWidget中,同时设置该行的其他单元格为无效单元格。 3. 最后,需要重写mousePressEvent()函数,以便在用户点击合并后的单元格时,可以选中该行中的所有单元格。 下面是一个示例代码,供您参考: ``` // 自定义QTableWidgetItem类 class MergedTableWidgetItem : public QTableWidgetItem { public: MergedTableWidgetItem(const QString &text, int rowSpan) : QTableWidgetItem(text), m_rowSpan(rowSpan) {} int rowSpan() const { return m_rowSpan; } private: int m_rowSpan; // 记录合并的行数 }; // 重写TableWidget的setItem()函数 void MyTableWidget::setItem(int row, int column, QTableWidgetItem *item) { if (item && item->text().isEmpty()) // 如果当前单元格为空,则返回 return; int rowSpan = 1; for (int i = row + 1; i < rowCount(); ++i) // 查找下面连续的空单元格 { QTableWidgetItem *nextItem = item(row + 1, column); if (nextItem && nextItem->text().isEmpty()) ++rowSpan; else break; } if (rowSpan > 1) // 如果需要合并单元格 { MergedTableWidgetItem *mergedItem = new MergedTableWidgetItem(item->text(), rowSpan); setItem(row, column, mergedItem); // 将合并后的单元格添加到TableWidget中 for (int i = row + 1; i < row + rowSpan; ++i) setItem(i, column, nullptr); // 将其余单元格设置为无效单元格 } else QTableWidget::setItem(row, column, item); } // 重写TableWidget的mousePressEvent()函数 void MyTableWidget::mousePressEvent(QMouseEvent *event) { QTableWidgetItem *item = itemAt(event->pos()); if (item && item->rowSpan() > 1) // 如果当前单元格为合并后的单元格 { int row = item->row(); int rowSpan = item->rowSpan(); for (int i = row; i < row + rowSpan; ++i) selectRow(i); // 选中该行中的所有单元格 } else QTableWidget::mousePressEvent(event); } ``` 希望这个示例代码能够帮到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值