2010-10-14 4 views
0

J'ai un délégué pour créer un contrôle QLineEdit lorsque vous souhaitez modifier une cellule dans ma sous-classe de QTableView. Dans la fonction data de mon modèle, j'ai récemment ajouté un cas pour retourner une icône pour Qt::DecorationRole pour certains éléments.Qt modèle-vue: comment supprimer model :: data DecorationRole lorsque l'éditeur de cellule QTableView est actif

Lorsque l'utilisateur modifie une cellule comportant une icône, la valeur saisie peut entraîner la disparition de l'icône. Tout fonctionne correctement. Le problème est que, si l'icône disparaît lorsque l'utilisateur tape encore dans la cellule, mon contrôle QLineEdit est toujours dimensionné comme s'il y avait une icône dans la cellule, mais comme il n'y a plus d'icône, une partie de la commande le texte que l'utilisateur tape est affiché là où l'icône était utilisée. Donc, je voudrais avoir la taille de mon délégué l'éditeur QLineEdit pour remplir la cellule entière même quand une icône est présente (donc l'icône serait invisible lors de la modification), ou mieux encore, je pense que le délégué supprime tout ce qui est retourné pour Qt::DecorationRole lors de la modification.

Actuellement, mon délégué a les fonctions suivantes:

QWidget *MapTextDelegate::createEditor(QWidget *parent, 
             const QStyleOptionViewItem & /*option*/, 
             const QModelIndex & /*index*/) const { 
    QLineEdit *line_editor; 
    line_editor = new QLineEdit(parent); 
    connect(line_editor, SIGNAL(textChanged(QString)), 
      this, SLOT(MapTextChanged())); 
    return line_editor; 
} 

QSize MapTextDelegate::sizeHint(const QStyleOptionViewItem &/*option*/, 
           const QModelIndex &/*index*/) const 
{ 
    QLineEdit *line_editor = new QLineEdit(); 
    return line_editor->sizeHint(); 
} 

Je ne vois rien d'autre dans le délégué qui pourrait avoir à voir avec la taille de l'éditeur. Je ne suis pas très familier avec l'utilisation des délégués - en fait, je suis assez nouveau pour C++ et Qt.

Des idées? J'utilise Qt 4.7.

Répondre

0

s'avère être très facile. J'ai réimplémenté updateEditorGeometry dans le délégué comme suit, et cela s'est occupé de lui!

void MapTextDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { 
    QStyledItemDelegate::updateEditorGeometry(editor, option, index); 
    editor->setGeometry(option.rect); 
} 
Questions connexes