如何在自定义模型中覆盖setData()如何更改文本颜色

时间:2019-05-10 15:13:57

标签: c++ qt

我需要更改模型中的文本颜色,如何覆盖SetData()QSqlQueryModel

我有一个适用于数据库的程序,我需要在按下按钮(大于90的单元格键)时将颜色更改为红色

点击代码按钮

for(int i=0;i<m_tableView->model()->columnCount();++i){
    for(int j =0;j<m_tableView->model()->rowCount();++j){
        if(m_tableView->model()->data(m_tableView->model()->index(i,j)) >=90 ) 
{
             m_tableView->model()->setData( m_tableView->model()->index(i, j, QModelIndex()), QColor(Qt::red), Qt::ForegroundRole);
        }
    }
}

但是由于QSqlQueryModel是只读的,因此我无法将文本颜色更改为红色,我需要描述我的自定义模型

    class MySqlModel : public QSqlQueryModel
{
    Q_OBJECT
public:
    MySqlModel(QObject *parent = nullptr);
    Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
    bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE;
};

我需要更改文本,为此,我需要重写setData()方法

我覆盖data()

QVariant MySqlModel::data(const QModelIndex &idx, int role) const

{

QVariant v = QSqlQueryModel::data(idx, role);

    if (role == Qt::ForegroundRole && idx.data().toInt() >= 90)
    {
        return QVariant(QColor(Qt::red));
    }

    return (v);

}

但是当我将模型添加到qtableview中时,文本会立即绘制,但是我需要以某种方式将其连接到按钮

0 个答案:

没有答案