IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Utiliser un éditeur personnalisé pour un QItemDelegate

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut Utiliser un éditeur personnalisé pour un QItemDelegate
    Hoy les gens!

    Je suis en train de bosser sur un petit editeur, fait à partir d'un QStandardItemModel et d'une QTreeView.

    Dans cet éditeur, j'ai 6 colonne. 4 colonne prennent des int, 1 colonne prend des QString en guise de noms, et 1 colonne prend des QString en guise de liens vers des fichiers sur le PC.

    Pour simplifier l'entrée d'un fichier dans le champ qui va bien, j'ai fais un QWidget composé d'un QLineEdit pour l'URL du fichier et d'un QPushButton qui ouvre un QFileDialog pour choisir le fichier.

    J'ai créé un ItemDelegate personnalisé pour ça, qui choisis le bon editor en fonction de la colonne sélectionnée. Mon soucis, c'est que le Widget personnalisé que j'ai fais ne s'affiche pas lorsque je clique sur la colonne des fichiers.

    J'ai vu le système des QEditorCreator et des QItemEditorFactory, où on peut associer un editeur à un type de QVariant, mais je n'ai pas de QVariant qui correspondrait à un fichier. Il y a bien URL mais ça colle plus avec les liens internet.

    Comment pourrais-je m'y prendre pour que mon editor s'affiche?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut
    Jvais rajouter des détails sous forme de code, c'est un problème qui me pose bien des soucis.

    L'éditor que je veux appliquer ce construit sous cette forme :

    URLEdit.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class URLEdit : public QWidget
    {
    	Q_OBJECT
     
    	QLineEdit *	line_edit;
    public:
    	URLEdit(QWidget * parent = 0);
     
    	void setText(const QString & text);
     
    	QString text() const;
     
    private slots:
    	void browse();
    	void check();
    };
    URLEdit.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    URLEdit::URLEdit(QWidget *parent) :
    QWidget(parent)
    {
    					line_edit = new QLineEdit;
     
    	QPushButton	*	browse_button = new QPushButton("...");
    					browse_button->setFixedWidth(30);
     
    	QHBoxLayout *	url_edit_layout = new QHBoxLayout;
    					url_edit_layout->addWidget(line_edit);
    					url_edit_layout->addWidget(browse_button);
     
    	setLayout(url_edit_layout);
    }
    Et j'ai construit mon delegate comme tel :

    delegate.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    QWidget * SoundDelegate::createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
    {
    	switch(index.column())
    	{
    		case 0:	// Id
     
    		...
    		...
     
    		case 5: // File
    			{
    				URLEdit * editor = new URLEdit(parent);
    				return editor;
    			}
    	}
    }
     
    void SoundDelegate::setEditorData(QWidget * editor, const QModelIndex & index) const
    {
    	switch(index.column())
    	{
    		case 0:
     
    		...
    		...
     
    		case 5:
    			{
    				QString text = index.model()->data(index, Qt::EditRole).toString();
    				URLEdit * line_edit = static_cast<URLEdit *>(editor);
    				line_edit->setText(text);
    			}
    			return;
    	}
    }
     
    void SoundDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
    {
    	switch(index.column())
    	{
    		case 0:
     
    		...
    		...
     
    		case 5:
    			{
    				URLEdit * line_edit = static_cast<URLEdit *>(editor);
    				QString text = line_edit->text();
    				model->setData(index, text, Qt::EditRole);
    			}
    			return;
    	}
    }
     
    void SoundDelegate::updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const
    {
    	editor->setGeometry(option.rect);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Par défaut
    Salut,

    Si j'ai bien compris ce que tu veux faire, alors, de mémoire, il y a sur QAbstractItemView 2 méthodes du genre :

    openPersistentEditor et closePersistentEditor

    qui prennent en paramètre un QModelIndex, et devraient faire ce que tu souhaites. Par contre, apparemment, il faut donc faire open pour chaque index valide de ton model, enfin du moins chaque index valide qui t'intéresse.

    Ca fait longtemps que j'ai pas bossé avec des delegate, donc je ne garantis rien...

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/04/2013, 19h35
  2. Réponses: 0
    Dernier message: 26/05/2009, 12h03
  3. Utiliser un éditeur pour faciliter la création des pages
    Par tum0506 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/04/2008, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo