我需要更改模型中的文本颜色,如何覆盖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中时,文本会立即绘制,但是我需要以某种方式将其连接到按钮