Je ne sais pas s'il existe un moyen plus simple, mais vous pouvez écrire votre propre délégué d'élément qui crée un QLineEdit. Lors de la mise à jour de l'éditeur avec les données du modèle, vous désélectionnez le texte et déplacez éventuellement le curseur au début. Le délégué serait quelque chose comme ceci (je n'ai pas d'installation Qt disponible pour le moment donc je ne peux pas le tester, mais l'idée devrait fonctionner) :
QWidget * MyDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & option,
const QModelIndex & index) const
{
// Just creates a plain line edit.
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
void MyDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
// Fetch current data from model.
QString value = index.model()->data(index, Qt::EditRole).toString();
// Set line edit text to current data.
QLineEdit * lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setText(value);
// Deselect text.
lineEdit->deselect();
// Move the cursor to the beginning.
lineEdit->setCursorPosition(0);
}
void MyDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,
const QModelIndex &index) const
{
// Set the model data with the text in line edit.
QLineEdit * lineEdit = static_cast<QLineEdit*>(editor);
QString value = lineEdit.text();
model->setData(index, value, Qt::EditRole);
}
Si vous n'avez pas encore utilisé les délégués dans la documentation de Qt, il y a un outil utile exemple .