Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec cases à cocher

Appel d'un délégué sans effet

    13 juillet 2019 à 17:04:31

    Bonjour,

    Voici mon code, pourriez vous me dire s'il y a une erreur car l'appel de mon delegué est sans effet.

    Je ne comprends pas, merci d'avance.

    Code:

    #include "paystablemodel.h"
    #include "delegue.h"
    
    PaysTableModel::PaysTableModel(const QStringList &listePays, QList<int> &listeCases, QObject *parent):QAbstractTableModel(parent)
    
     {if (listePays.count() > 0) this->listePays = listePays;
    if (listeCases.count() > 0) this->listeCases = listeCases;
    
     }
    int PaysTableModel::rowCount(const QModelIndex &parent) const
    { return parent.isValid() ? 0 : this->listePays.count(); }
    //{return 5;}
    int PaysTableModel::columnCount(const QModelIndex &parent) const
    { return parent.isValid() ? 0 : NbColonnes; }
    //{return 2;}
    
    QVariant PaysTableModel::data(const QModelIndex &index, int role) const  {
    if (! index.isValid()) return QVariant() ;
    if(((unsigned int)index.row()>=this->listePays.count())||(index.column()>=NbColonnes))
    return QVariant();
    if ((role == Qt::DisplayRole || role == Qt::EditRole)) {
        if(index.column() == Pays) return this->listePays.at(index.row());}
    
    if (role == Qt::CheckStateRole && (index.column() == Cases))
       {
           {int checked  = listeCases.at(index.row());
             if (checked)
            {return Qt::Checked;}
            else
             {return Qt::Unchecked;}
        }
    }
     else
    
         {
    return QVariant();
    }
    
    }
    
    bool PaysTableModel::setData(const QModelIndex &index, const QVariant &value, int role){
         if (index.column() == Cases && role == Qt::CheckStateRole) {
     this->listeCases.replace(index.row(), value.toInt());
      if (index.column() == Cases)
          { emit(dataChanged(index,index));
        return true;}
        }
        return false;
    }
    
    Qt::ItemFlags PaysTableModel::flags(const QModelIndex &index) const {
        if (! index.isValid())
        {return Qt::ItemIsEnabled; }
    
    if (index.column() == Pays)
    {
    return   Qt::ItemIsEnabled;
    }
    else if (index.column() == Cases)
    {
    return QAbstractTableModel::flags(index) | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;
    }
    return QAbstractTableModel::flags(index);
    
    
      }

    Code délégué:

    #include "delegue.h"
    #include "paystablemodel.h"
    
    Delegue::Delegue(QObject *parent) :
        QStyledItemDelegate(parent)
    {
    
    }
    
    QWidget *Delegue::createEditor(QWidget *parent,
        const QStyleOptionViewItem &option,
        const QModelIndex &index ) const
    {
        if (index.column() == 1)
            {
        QCheckBox *editor = new QCheckBox(parent);
           editor->isCheckable();
    
        return editor;
            }
        return QStyledItemDelegate::createEditor(parent, option, index);
    }
    
    
    
    void Delegue::setEditorData(QWidget *editor,
                                         const QModelIndex &index) const
     {
        qDebug() << 10;
          if (index.column() == 1)
            {
            int value = index.model()->data(index, Qt::DisplayRole).toInt();
             QCheckBox *checkBox = static_cast<QCheckBox*>(editor);
            if(value == 1) {
                    checkBox->setCheckState(Qt::Checked);
             } else {
                    checkBox->setCheckState(Qt::Unchecked);
                    }
        }
        else
            {
                QStyledItemDelegate::setEditorData(editor, index);
            }
     }
    
    
    
    void Delegue::setModelData(QWidget *editor, QAbstractItemModel *model,
                                        const QModelIndex &index) const
     {
        if (index.column() == 1)
            {
                QCheckBox *checkBox = static_cast<QCheckBox*>(editor);
                int value;
                if(checkBox->checkState() == Qt::Checked)
                    value = 1;
                else
                    value = 0;
                model->setData(index, value);
        }
        else
            {
                QStyledItemDelegate::setModelData(editor, model, index);
            }
     }
    
    
    void Delegue::updateEditorGeometry(QWidget *editor,
         const QStyleOptionViewItem &option, const QModelIndex &index) const
     {
        Q_UNUSED(index);
        editor->setGeometry(option.rect);
     }
    
    
    
    void Delegue::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        if (index.column() == 1)
        {
             int value = index.model()->data(index, Qt::DisplayRole).toInt();
            QStyleOptionButton check_box;
            check_box.state = QStyle::State_Enabled;
            check_box.rect = option.rect;
            if (value == Qt::Checked) {
                check_box.state = QStyle::State_On|QStyle::State_Enabled;;
            }
            else {
                check_box.state = QStyle::State_Off|QStyle::State_Enabled;;
            }
          QApplication::style()->drawControl(QStyle::CE_CheckBox, &check_box, painter);
        }
        else
            {
                QStyledItemDelegate::paint(painter, option, index);
            }
    }
    




    • Partager sur Facebook
    • Partager sur Twitter
    RL

    Problème avec cases à cocher

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown