要让QTableView的某一行背景色变红,可以通过设置单元格的背景色来实现。首先需要重写QTableView的paintEvent方法,然后在该方法中判断当前鼠标所在的行,并设置该行的背景色为红色。以下是一个简单的示例:
#include <QApplication>
#include <QTableView>
#include <QHeaderView>
#include <QStyledItemDelegate>
#include <QPainter>
class RedBackgroundDelegate : public QStyledItemDelegate {
public:
RedBackgroundDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent), selectedRow(-1) {}
void setSelectedRow(int row) {
selectedRow = row;
}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
if (index.row() == selectedRow) {
painter->fillRect(option.rect, QColor(255, 0, 0));
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
private:
int selectedRow;
};
class MyTableView : public QTableView {
public:
MyTableView(QWidget *parent = nullptr) : QTableView(parent) {
setMouseTracking(true);
delegate = new RedBackgroundDelegate(this);
setItemDelegate(delegate);
}
protected:
void mouseMoveEvent(QMouseEvent *event) override {
QModelIndex index = indexAt(event->pos());
if (index.isValid()) {
delegate->setSelectedRow(index.row());
viewport()->update();
} else {
delegate->setSelectedRow(-1);
viewport()->update();
}
}
private:
RedBackgroundDelegate *delegate;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyTableView tableView;
tableView.show();
return app.exec();
}