from PyQt4 import QtGui, QtCore, QtSql
#from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
def main():
w = MyWindow()
w.show()
sys.exit(app.exec_())
def __init__(self, *args):
# connect to db (if doesn't exist, it's auto-created)
self.db.setDatabaseName('test.db')
self.db.open()
#create a table in db and add some data
query.exec_("DROP TABLE IF EXISTS games")
query.exec_("CREATE TABLE games(id INTEGER PRIMARY KEY, hometeam TEXT, visitorteam TEXT) ")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Star', 'Eagles')")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Best team', 'Reds');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('NonWinners', 'Loosers');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('North', 'South');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('East', 'west');")
# set the model
model = CustomSqlModel(self)#QtGui.QStandardItemModel(0, 2)
self.setModel(model)
model.setQuery("SELECT * FROM games")
# paint first two rows
model.setRowsToBeColored([0,3])
for i in range(0, 2):
model.setData(index, QtCore.Qt.red, QtCore.Qt.BackgroundRole)
def __init__(self, dbcursor=None):
super(CustomSqlModel, self).__init__()
def setRowsToBeColored(self, rows):
self.rows = rows
def data(self, index, role):
row = index.row()
print("row=", row, " row in self.rows=", row in self.rows)
if role == QtCore.Qt.BackgroundRole and row in self.rows:
if __name__ == "__main__":
main()
from PyQt4 import QtGui, QtCore, QtSql
#from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
def main():
app = QtGui.QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
class MyWindow(QtGui.QTableView):
def __init__(self, *args):
QtGui.QTableView.__init__(self, *args)
# connect to db (if doesn't exist, it's auto-created)
self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('test.db')
self.db.open()
#create a table in db and add some data
query = QtSql.QSqlQuery()
query.exec_("DROP TABLE IF EXISTS games")
query.exec_("CREATE TABLE games(id INTEGER PRIMARY KEY, hometeam TEXT, visitorteam TEXT) ")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Star', 'Eagles')")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Best team', 'Reds');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('NonWinners', 'Loosers');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('North', 'South');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('East', 'west');")
# set the model
model = CustomSqlModel(self)#QtGui.QStandardItemModel(0, 2)
self.setModel(model)
model.setQuery("SELECT * FROM games")
# paint first two rows
model.setRowsToBeColored([0,3])
for i in range(0, 2):
index = QtCore.QModelIndex(model.index(i, 0))
model.setData(index, QtCore.Qt.red, QtCore.Qt.BackgroundRole)
class CustomSqlModel(QtSql.QSqlQueryModel):
def __init__(self, dbcursor=None):
super(CustomSqlModel, self).__init__()
def setRowsToBeColored(self, rows):
self.rows = rows
def data(self, index, role):
row = index.row()
print("row=", row, " row in self.rows=", row in self.rows)
if role == QtCore.Qt.BackgroundRole and row in self.rows:
return QBrush(QtCore.Qt.red)
return QtSql.QSqlQueryModel.data(self, index, role);
if __name__ == "__main__":
main()
To copy to clipboard, switch view to plain text mode
#include <QIdentityProxyModel>
class ExtraRolesProxyModel : public QIdentityProxyModel
{
Q_OBJECT
Q_DISABLE_COPY(ExtraRolesProxyModel)
public:
explicit ExtraRolesProxyModel
(QObject* parent
=Q_NULLPTR
) :QIdentityProxyModel(parent)
{}
virtual QVariant data
(const QModelIndex &index,
int role
= Qt
::DisplayRole) const Q_DECL_OVERRIDE
{ const qint64 hashKey = (static_cast<qint64>(index.row()) << 32) | static_cast<qint64>(index.column());
auto tableIter = m_extraRoles.constFind(hashKey);
if(tableIter==m_extraRoles.constEnd())
return QIdentityProxyModel::data(index,role);
auto roleIter = tableIter.value().constFind(role);
if(roleIter==tableIter.value().constEnd())
return QIdentityProxyModel::data(index,role);
return roleIter.value();
}
virtual bool setData
(const QModelIndex &index,
const QVariant &value,
int role
= Qt
::EditRole) Q_DECL_OVERRIDE
{ if(!index.isValid())
return false;
Q_ASSERT(index.model()==this);
const qint64 hashKey = (static_cast<qint64>(index.row()) << 32) | static_cast<qint64>(index.column());
if(value.isValid()){
m_extraRoles[hashKey][role] = value;
emit dataChanged(index,index,QVector<int>(1,role));
return true;
}
auto tableIter = m_extraRoles.find(hashKey);
if(tableIter==m_extraRoles.end())
return false;
auto roleIter = tableIter.value().find(role);
if(roleIter==tableIter.value().end())
return false;
tableIter.value().erase(roleIter);
if(tableIter.value().isEmpty())
m_extraRoles.erase(tableIter);
emit dataChanged(index,index,QVector<int>(1,role));
return true;
}
private:
QHash<qint64,QHash<qint32,QVariant> > m_extraRoles;
};
#include <QIdentityProxyModel>
class ExtraRolesProxyModel : public QIdentityProxyModel
{
Q_OBJECT
Q_DISABLE_COPY(ExtraRolesProxyModel)
public:
explicit ExtraRolesProxyModel(QObject* parent=Q_NULLPTR)
:QIdentityProxyModel(parent)
{}
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE{
const qint64 hashKey = (static_cast<qint64>(index.row()) << 32) | static_cast<qint64>(index.column());
auto tableIter = m_extraRoles.constFind(hashKey);
if(tableIter==m_extraRoles.constEnd())
return QIdentityProxyModel::data(index,role);
auto roleIter = tableIter.value().constFind(role);
if(roleIter==tableIter.value().constEnd())
return QIdentityProxyModel::data(index,role);
return roleIter.value();
}
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE {
if(!index.isValid())
return false;
Q_ASSERT(index.model()==this);
const qint64 hashKey = (static_cast<qint64>(index.row()) << 32) | static_cast<qint64>(index.column());
if(value.isValid()){
m_extraRoles[hashKey][role] = value;
emit dataChanged(index,index,QVector<int>(1,role));
return true;
}
auto tableIter = m_extraRoles.find(hashKey);
if(tableIter==m_extraRoles.end())
return false;
auto roleIter = tableIter.value().find(role);
if(roleIter==tableIter.value().end())
return false;
tableIter.value().erase(roleIter);
if(tableIter.value().isEmpty())
m_extraRoles.erase(tableIter);
emit dataChanged(index,index,QVector<int>(1,role));
return true;
}
private:
QHash<qint64,QHash<qint32,QVariant> > m_extraRoles;
};
To copy to clipboard, switch view to plain text mode
Bookmarks