代码实现如下:
首先,在QTableWidget的构造函数中,设置整个表格的默认颜色:
MyTableWidget::MyTableWidget(QWidget *parent) : QTableWidget(parent)
{
// 设置默认颜色
QPalette palette;
palette.setColor(QPalette::Base, Qt::white);
setPalette(palette);
}
然后,在QTableWidget的行点击事件中,记录当前行的颜色,并将整行变为灰色:
void MyTableWidget::on_itemClicked(QTableWidgetItem *item)
{
int row = item->row();
// 记录当前行颜色
QColor currentColor = item->background().color();
// 将整行变为灰色
for (int i = 0; i < columnCount(); i++) {
QTableWidgetItem *item = this->item(row, i);
if (item) {
item->setBackground(Qt::gray);
}
}
// 保存当前行颜色
m_colorMap[row] = currentColor;
}
最后,在QTableWidget的重绘事件中,恢复被点击前的行颜色:
void MyTableWidget::paintEvent(QPaintEvent *event)
{
QTableWidget::paintEvent(event);
// 恢复之前记录的颜色
for (auto it = m_colorMap.begin(); it != m_colorMap.end(); ++it) {
int row = it.key();
QTableWidgetItem *item = this->item(row, 0);
if (item) {
item->setBackground(it.value());
}
}
}