QT QSqlTableModel - 给定数据列中的背景颜色 [英] QT QSqlTableModel - background color in a given data column

查看:701
本文介绍了QT QSqlTableModel - 给定数据列中的背景颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个tableView示例:





当数据列状态为S.
表的背景颜色为绿色,而N为红色。



我想要的示例:





我的代码:

  MainWindow :: MainWindow(QWidget * parent):QMainWindow(parent),ui(new Ui :: MainWindow)
{
ui-> setupUi(this);
// Con Db ...

model = new QSqlTableModel(this);
model-> setTable(app);
model-> setEditStrategy(QSqlTableModel :: OnManualSubmit);
model-> select();
model-> setHeaderData(0,Qt :: Horizo​​ntal,tr(number));
model-> setHeaderData(1,Qt :: Horizo​​ntal,tr(status));
ui-> tableView-> setModel(model);
}

有人可以帮我吗?

解决方案

重新实现,即子类 QSqlTableModel ,并提供数据实现功能如下。注意, MySubClassedSqlTableModel 实现需要放在MOC的头文件中(通常自动完成)。

  #include< QSqlTableModel> 
class MySubClassedSqlTableModel:public QSqlTableModel
{
Q_OBJECT
public:
MySubClassedSqlTableModel(QObject * parent = 0,QSqlDatabase db = QSqlDatabase())
:QSqlTableModel (parent,db){;}
QVariant数据(const QModelIndex& index,int role = Qt :: DisplayRole)const
{
if(role == Qt :: BackgroundColorRole)
{
const QVariant value(data(index,Qt :: DisplayRole));
return QVariant(QColor(value.toString()==S?Qt :: green:Qt :: red));
}
return QSqlTableModel :: data(index,role);
}
};

model = new MySubClassedSqlTableModel(this); //< ==== use your model
model-> setTable(app);
model-> setEditStrategy(QSqlTableModel :: OnManualSubmit);
model-> select();
model-> setHeaderData(0,Qt :: Horizo​​ntal,tr(number));
model-> setHeaderData(1,Qt :: Horizo​​ntal,tr(status));
ui-> tableView-> setModel(model);

Btw子类化在大多数情况下需要做自定义行为。 p>

I have a tableView example:

Like when the data column status is S. The background color of the table would be green and when N would be red.

Example of what I want:

My code:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
       //Con Db...

        model = new QSqlTableModel(this);
        model->setTable("app");
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        model->select();
        model->setHeaderData(0, Qt::Horizontal, tr("number"));
        model->setHeaderData(1, Qt::Horizontal, tr("status"));
        ui->tableView->setModel(model);
}

Could someone help me?

解决方案

Reimplement, i.e. subclass QSqlTableModel and provide an implementation of the data function as per below. Note that the MySubClassedSqlTableModel implementation needs to be placed in a header file that is MOC'ed (normally automatically done).

  #include <QSqlTableModel>
    class MySubClassedSqlTableModel : public QSqlTableModel
    {
        Q_OBJECT
        public:
           MySubClassedSqlTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase())
           : QSqlTableModel(parent,db) {;}
           QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
           {
              if(role==Qt::BackgroundColorRole)
              {
                 const QVariant value(data(index,Qt::DisplayRole));
                 return QVariant(QColor(value.toString()=="S"?Qt::green:Qt::red));
              }
              return QSqlTableModel::data(index,role);
           }
    };

    model = new MySubClassedSqlTableModel(this); //<==== use your model
            model->setTable("app");
            model->setEditStrategy(QSqlTableModel::OnManualSubmit);
            model->select();
            model->setHeaderData(0, Qt::Horizontal, tr("number"));
            model->setHeaderData(1, Qt::Horizontal, tr("status"));
            ui->tableView->setModel(model);

Btw subclassing is something you need to do in most cases when you want to customize the behavior.

这篇关于QT QSqlTableModel - 给定数据列中的背景颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆