gpt4 book ai didi

c++ - 绘制 QTableView 的背景(使用自定义 QStyledItemDelegate)

转载 作者:行者123 更新时间:2023-11-30 03:15:51 31 4
gpt4 key购买 nike

我一直在尝试使用(自定义)QStyledItemDelegate 在(自定义)QTableView 中使用“每个单元格”自定义背景。一切正常,直到我真正尝试拥有我的自定义背景。举个例子,我希望我所有的单元格都有红色背景。这是我的 Delegatepaint 方法。

    QStyleOptionViewItem newOption = option;
auto normalText = newOption.palette.brush(QPalette::ColorGroup::Normal, QPalette::ColorRole::Text);
// Works as expected
newOption.palette.setBrush(QPalette::ColorGroup::Normal, QPalette::ColorRole::Highlight, Qt::gray); // QBrush(Qt::GlobalColor::blue, Qt::BrushStyle::NoBrush));
// Expected too: selected cells are gray
newOption.palette.setBrush(QPalette::ColorGroup::Normal, QPalette::ColorRole::HighlightedText, normalText);

// All of the following do NOT work. I've tried every possible combination without success.
newOption.palette.setBrush(QPalette::ColorGroup::Normal, QPalette::ColorRole::Window, Qt::red);
newOption.palette.setBrush(QPalette::ColorGroup::Inactive, QPalette::ColorRole::Base, Qt::red);
newOption.palette.setBrush(QPalette::ColorGroup::Inactive, QPalette::ColorRole::AlternateBase, Qt::red);
newOption.palette.setBrush(QPalette::ColorGroup::Active, QPalette::ColorRole::Base, Qt::red);
newOption.palette.setBrush(QPalette::ColorGroup::Active, QPalette::ColorRole::AlternateBase, Qt::red);
QStyledItemDelegate::paint(painter, newOption, index);

我该如何实现?我认为我这样做的方式相当简单和直观......这里有什么问题?

最佳答案

您的代码有以下错误:

考虑到上面的解决方案是:

#include <QtWidgets>

class StyledItemDelegate: public QStyledItemDelegate
{
public:
using QStyledItemDelegate::QStyledItemDelegate;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
{
QStyledItemDelegate::initStyleOption(option, index);
QBrush normalText = option->palette.brush(QPalette::ColorGroup::Normal, QPalette::ColorRole::Text);
option->palette.setBrush(QPalette::ColorGroup::Normal, QPalette::ColorRole::Highlight, Qt::gray);
option->palette.setBrush(QPalette::ColorGroup::Normal, QPalette::ColorRole::HighlightedText, normalText);
option->backgroundBrush = QColor(Qt::red);
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QTableView w;
StyledItemDelegate *delegate = new StyledItemDelegate(&w);
w.setItemDelegate(delegate);
QStandardItemModel model(10, 10);
w.setModel(&model);
w.show();

return a.exec();
}

关于c++ - 绘制 QTableView 的背景(使用自定义 QStyledItemDelegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735853/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com