自学内容网 自学内容网

QTableView设置某行或某列的背景色

QTableView设置某行或某列的背景色

QT5.15.2

.h

#include <QStyledItemDelegate>
#include <QPainter>

class RowColorDelegate : public QStyledItemDelegate {
public:
    RowColorDelegate(QColor color, QObject* parent = nullptr)
        : QStyledItemDelegate(parent), m_color(color) {}

    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
    ~RowColorDelegate();

private:
    QColor m_color;
};

.cpp

#include "RowColorDelegate.h"
#include <qapplication.h>

void RowColorDelegate:: paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
    QStyledItemDelegate::paint(painter, option, index);

    //if (option.state.testFlag(QStyle::State_Enabled)) {
    //    // 设置行的颜色
    //    painter->fillRect(option.rect, m_color);
    //}

    QStyleOptionViewItem opt = option;
    initStyleOption(&opt, index);

    painter->fillRect(option.rect, m_color);// QBrush(QColor(0, 238, 101)));//这块为写背景的代码
    QStyle* style = opt.widget ? opt.widget->style() : QApplication::style();
    style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
    //qDebug() << "txw paint" << index.row();
    
}

RowColorDelegate::~RowColorDelegate()
{}

使用方法:

QSqlQueryModel* sql_model;

sql_model = new QSqlQueryModel(this);
       
        sql_model->setQuery("select * from dxxtb_mtoxve_loxt_tab");

查询数据后

mainwindows.cpp里面

  // 设置代理,这里假设我们要设置第二行的颜色为
        RowColorDelegate* delegate = new RowColorDelegate(Qt::gray, ui.tableView_database);
        for(int i=0;i< sql_model->rowCount();i++)
        {
            if (i % 2 == 1)
            {
                ui.tableView_database->setItemDelegateForRow(i, delegate); // 设置第二行使用自定义代理
            }
            
        }


原文地址:https://blog.csdn.net/txwtech/article/details/144290654

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!