您可以通过使用QTableWidget的itemEntered()和itemExited()信号来实现这个效果。具体步骤如下:
创建一个变量来保存当前高亮的行号。
连接itemEntered()和itemExited()信号到相应的槽函数中,当鼠标进入某个单元格时,将该单元格所在的行高亮显示;当鼠标离开某个单元格时,取消该行高亮显示。
在高亮某一行之前,先取消当前高亮的行。
以下是示例代码:
// 声明变量用于保存当前高亮的行
int highlighted_row = -1;
// 槽函数:将指定行设置为高亮状态
void highlightRow(int row)
{
if (row != highlighted_row) {
// 取消当前高亮的行
if (highlighted_row >= 0 && highlighted_row < ui->tableWidget->rowCount()) {
for (int i = 0; i < ui->tableWidget->columnCount(); i++) {
QTableWidgetItem* item = ui->tableWidget->item(highlighted_row, i);
item->setBackground(QBrush(Qt::white));
}
}
// 设置新的高亮行
for (int i = 0; i < ui->tableWidget->columnCount(); i++) {
QTableWidgetItem* item = ui->tableWidget->item(row, i);
item->setBackground(QBrush(QColor(230, 230, 255))); // 高亮颜色自定义为淡蓝色
}
highlighted_row = row;
}
}
// 槽函数:取消高亮状态
void cancelHighlight()
{
if (highlighted_row >= 0 && highlighted_row < ui->tableWidget->rowCount()) {
for (int i = 0; i < ui->tableWidget->columnCount(); i++) {
QTableWidgetItem* item = ui->tableWidget->item(highlighted_row, i);
item->setBackground(QBrush(Qt::white));
}
highlighted_row = -1;
}
}
// 连接信号和槽
connect(ui->tableWidget, SIGNAL(itemEntered(QTableWidgetItem*)), this, SLOT(highlightRow(QTableWidgetItem*)));
connect(ui->tableWidget, SIGNAL(itemExited(QTableWidgetItem*)), this, SLOT(cancelHighlight()));
这将使在鼠标悬停在任何单元格上时,整行都会高亮显示。当鼠标移动到另一行时,前一行的高亮状态将被取消,并将新的行设置为高亮状态。