QT QSqlTableModel - 给定数据列中的背景颜色 [英] QT QSqlTableModel - background color in a given data column
问题描述
我有一个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 :: Horizontal,tr(number));
model-> setHeaderData(1,Qt :: Horizontal,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 :: Horizontal,tr(number));
model-> setHeaderData(1,Qt :: Horizontal,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屋!