我希望 QTableWidget 的不同单元格具有不同的选择颜色。
要更改整个表格的选择颜色,我可以使用:
QTableWidget* table = new QTableWidget;
table->setStyleSheet("QTableWidget::item{selection-background-color:#ff0000;}");
设置单个单元格常用的背景颜色,可以这样写:
table->setItem(row, column, new QTableWidgetItem(""));
table->item(row, column)->setBackgroundColor(QColor(255,255,0));
但是我找不到任何有关不同单元格的不同选择颜色的信息。
这对我来说是一个非常有趣的问题,我写了一个例子)) 我使用委托来解决这个问题
class MyDelegate : public QItemDelegate
{
public:
MyDelegate( QObject *parent ) : QItemDelegate( parent ) { }
void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};
void MyDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
QItemDelegate::paint( painter, option, index );
QColor background = QColor(rand()%255, rand()%255, rand()%255);
QColor background2 = QColor(255, 255, 255);
painter->fillRect(option.rect, background);
if (option.state & QStyle::State_Selected) {
painter->fillRect(option.rect, background);
} else {
painter->fillRect(option.rect, background2);
}
}
它将如何运作?每次选择,它都会为所选项目生成新颜色
委托整合
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget* m_pTableWidget = new QTableWidget();
m_pTableWidget->setRowCount(10);
m_pTableWidget->setColumnCount(10);
for (int i = 0; i < m_pTableWidget->rowCount(); ++i) {
m_pTableWidget->setItemDelegateForRow(i, new MyDelegate(m_pTableWidget));
}
m_pTableWidget->show();
return a.exec();
}
您可以更改代码并为特定项目指定特定颜色。