这是一个简单demo,直接贴代码。
tablewidget.h
#ifndef TABLEWIDGET_H
#define TABLEWIDGET_H
#include
#include
class TableWidget : public QTableWidget
{
Q_OBJECT
public:
explicit TableWidget(QWidget *parent = 0);
protected:
void setRowColor(int row, QColor color);
signals:
public slots:
void mycellEntered(int row, int column);
private:
QTableWidget *tableWidget;
QColor defaultBkColor;
int previousColorRow;
};
#endif // TABLEWIDGET_H
tablewidget.cpp
#include "tablewidget.h"
#include
#include
TableWidget::TableWidget(QWidget *parent) :
QTableWidget(parent)
{
setGeometry(100,100,600,300);
defaultBkColor = QColor(255,255,255); //默认背景色
previousColorRow = -1;
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10); //设置行数为10
tableWidget->setColumnCount(5); //设置列数为5
tableWidget->setGeometry(10,10,580,280);
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置整行选择
tableWidget->setMouseTracking(true); //开启捕获鼠标功能
tableWidget->setStyleSheet("selection-background-color:pink"); //设置选中行颜色
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止编辑表格
for (int i=0; i<10; i++)
for (int j=0; j<5;j++)
{
QTableWidgetItem *item = new QTableWidgetItem(QIcon(":/btn1_bright"), "Jan");
tableWidget->setItem(i,j,item);
}
connect(tableWidget,SIGNAL(cellEntered(int,int)),this,SLOT(mycellEntered(int,int)));
}
void TableWidget::mycellEntered(int row, int column)
{
QTableWidgetItem *item = 0;
//还原上一行的颜色
item = tableWidget->item(previousColorRow, 0);
if (item != 0)
{
this->setRowColor(previousColorRow, defaultBkColor);
}
//设置当前行的颜色
item = tableWidget->item(row, column);
if (item != 0 && !item->isSelected() && !item->text().isEmpty())
{
this->setRowColor(row, QColor(193,210,240));
}
//设置行的索引
previousColorRow = row;
}
//设置某一行的颜色
void TableWidget::setRowColor(int row, QColor color)
{
for (int col=0; colcolumnCount(); col++)
{
QTableWidgetItem *item = tableWidget->item(row, col);
item->setBackgroundColor(color);
}
}
main.cpp
#include
#include
#include "tablewidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("System")); //消除乱码
TableWidget tableWidget;
tableWidget.show();
return a.exec();
}
运行效果: