Couleur d'une ligne avec QIdentityProxyModel
Bonjour,
Lorsque j'exécute ce code, toute la table est colorée en bleu, mais je voudrais que ce soit la cellule (4,1).
Merci de m'indiquer comment procéder.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class monModele : public QIdentityProxyModel
{
public:
monModele(QObject* parent = 0): QIdentityProxyModel(parent)
{ qDebug() << "constructor"; }
QVariant data(const QModelIndex &index, int role) const
{
if (role == Qt::ForegroundRole) {
return QVariant(QBrush (QColor(Qt::blue)));
}
return QIdentityProxyModel::data(index, role);
}
............
sqlModele->setQuery(*mRequete);
monModele *identModel = new monModele();
identModel->setSourceModel(sqlModele);
qDebug() << "data"<<
identModel->data(
identModel->index(4,1),
Qt::ForegroundRole);
ui->tableView->setModel(identModel);
ui->tableView->show();
} |
Problème variable Index avec QIdentityProxyModel
Merci pour votre réponse , j'ai donc mis ceci mais il y a une erreur de compilation au niveau de if...Index. Merci de m'indiquer ce qui provoque l'erreur.
Voici le nouveau code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class monModele : public QIdentityProxyModel
{
public:
monModele(QObject* parent = 0): QIdentityProxyModel(parent)
{ qDebug() << "constructor"; }
QVariant data(const QModelIndex &index, int role) const
{
if (role == Qt::ForegroundRole) {
return QVariant(QBrush (QColor(Qt::blue)));
}
if (index == (index.row()) && (index == index.column())
{
return QVariant();
}
return QIdentityProxyModel::data(index, role);
} |
Problème variable Index avec QIdentityProxyModel
Merci de votre réponse, à présent je comprends mieux ce fonctionnement.
Il reste cependant un petit problème: Quelle que soit la valeur de index dans identModel->data(identModel->index(10,1), Qt::ForegroundRole);.
Ici par exemple (10,1) la coloration est toujours en (6,1) comme dans le code suivant:
Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| monModele(QObject* parent = 0): QIdentityProxyModel(parent)
{ qDebug() << "constructor"; }
QVariant data(const QModelIndex &index, int role) const override
{
int row = index.row();
int col = index.column();
if (role == Qt::ForegroundRole)
{
if (row == 6 && col == 1)
{
QColor color(Qt::blue);
return QVariant (color);
}
return QVariant();
}
if (role == Qt::ForegroundRole)
{
if (row == 8 && col == 1)
{
QColor color(Qt::red);
return QVariant(color);
}
return QVariant();
}
return QIdentityProxyModel::data(index, role); |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| sqlModele->setQuery(*mRequete);
monModele *identModel = new monModele();
identModel->setSourceModel(sqlModele);
identModel->data(
identModel->index(10,1),
Qt::ForegroundRole);
ui->tableView->setModel(identModel);
ui->tableView->show(); |
Problème variable Index avec QIdentityProxyModel
Merci, je comprends. En fait index.row() passe toutes les valeurs possible. Il choisi ensuite au moment du test if. Donc l'instruction:
Code:
1 2 3
| identModel->data(
identModel->index(10,1),
Qt::BackgroundRole); |
ne sert à rien.
Une question: Comment affecter une variable à row dans if(row == 6) à la place de 6.
Une fois de plus, merci.
Problème variable Index avec QIdentityProxyModel
Merci pour votre éclairage,
Simplement ce que voulais savoir, comment fait on quand on est hors de la classe: class monModele : public QIdentityProxyModel, par exemple dans le main, pour indiquer le numéro de cellule ou de ligne.
Problème variable Index avec QIdentityProxyModel
Merci beaucoup pour ces exemples, à présent je tente de changer de couleur une ligne à partir d'un clic sur un bouton. Je vais m'inspirer de votre aide.
Merci encore.