如何为QTableWidget中的不同单元格设置不同的选择颜色

问题描述 投票:0回答:1

我希望 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));

但是我找不到任何有关不同单元格的不同选择颜色的信息。

qt qtablewidget qtstylesheets
1个回答
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();
}

结果

您可以更改代码并为特定项目指定特定颜色。

© www.soinside.com 2019 - 2024. All rights reserved.