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

Qt Discussion :

[Glisser/Déplacer] Avec les vues


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 8
    Points
    8
    Par défaut [Glisser/Déplacer] Avec les vues
    Bonjour,

    Je m'intéresse actuellement au fonctionnement du glisser/déposer avec Qt.

    Pour commencer j'ai donc créer deux modèles contenant des QList<QString> (pas de QStringList car je compte ensuite utiliser des QString<Objet*>).

    J'ai trouvé plusieurs informations dans la documentation, certains sujets de ce forums et d'autre forums pourtant je ne comprends pas le problème.

    Voici les codes :
    main.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
    #include <QApplication>
    #include <QWidget>
    #include <QHBoxLayout>
    #include <QListView>
     
    #include "ModelListeChaineDrag.h"
    #include "ModelListeChaineDrop.h"
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
     
     
    	QWidget *widget = new QWidget();
     
    	QHBoxLayout *layout = new QHBoxLayout(widget);
     
    	QList<QString> *liste = new QList<QString>();
    	for (int i = 0; i < 6; i++)
    	{
    		liste->append(QString("Chaine %1").arg(i) );
    	}
    	ModelListeChaineDrag *modeleDrag = new ModelListeChaineDrag(liste);
    	QListView *vueDrag = new QListView();
    		vueDrag->setModel(modeleDrag);
    		vueDrag->setDragEnabled(true);
     
    	ModelListeChaineDrop *modeleDrop = new ModelListeChaineDrop();
    	QListView *vueDrop = new QListView();
    		vueDrop->setModel(modeleDrop);
    		vueDrop->viewport()->acceptDrops();
     
     
    	layout->addWidget(vueDrag);
    	layout->addWidget(vueDrop);
     
    	widget->show();
     
    	return app.exec();
    }
    ModelListeChaineDrag.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
    17
    18
    19
    20
    21
    22
    23
    24
    #ifndef MODEL_LISTE_CHAINE_DRAG_H
    #define MODEL_LISTE_CHAINE_DRAG_H
     
    #include <QAbstractListModel>
    #include <QList>
     
    class ModelListeChaineDrag : public QAbstractListModel
    {
    	private :
    		QList<QString> *liste;
     
    	public :
    		ModelListeChaineDrag(QList<QString> *listeChaines = new QList<QString>(), QObject *parent = 0);
     
    		int rowCount(const QModelIndex &parent = QModelIndex() ) const;
    		QVariant data(const QModelIndex &index, int role) const;
    		Qt::ItemFlags flags(const QModelIndex &index) const;
     
    		bool removeRows(int row, int count, const QModelIndex &parent);
    		QMimeData* mimeData(const QModelIndexList &indexes) const;
    		QStringList mimeTypes() const;
    };
     
    #endif
    ModelListeChaineDrag.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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include "ModelListeChaineDrag.h"
    #include <QMimeData>
    #include <QStringList>
     
    ModelListeChaineDrag::ModelListeChaineDrag(QList<QString> *listeChaines, QObject *parent)
    	: QAbstractListModel(parent), liste(listeChaines)
    {}
     
    int ModelListeChaineDrag::rowCount(const QModelIndex &parent) const
    {
    	return liste->count();
    }
     
    QVariant ModelListeChaineDrag::data(const QModelIndex &index, int role) const
    {
    	if (false == index.isValid() )
    	{
    		return QVariant();
    	}
     
    	if (liste->count() < index.row() )
    	{
    		return QVariant();
    	}
     
    	if (Qt::DisplayRole != role)
    	{
    		return QVariant();
    	}
     
    	return liste->at(index.row() );
    }
     
    Qt::ItemFlags ModelListeChaineDrag::flags(const QModelIndex &index) const
    {
    	if (true == index.isValid() )
    	{
    		return Qt::ItemIsDragEnabled | QAbstractItemModel::flags(index);
    	}
    	else
    	{
    		return QAbstractItemModel::flags(index);
    	}
    }
     
    bool ModelListeChaineDrag::removeRows(int row, int count, const QModelIndex &parent)
    {
    	if (true == parent.isValid() )
    	{
    		return false;
    	}
     
    	if (liste->count() <= row || row + count <= 0)
    	{
    		return false;
    	}
     
    	int premierLigne = qMax(0, row);
    	int derniereLigne = qMin(row + count - 1, liste->count() - 1);
     
    	beginRemoveRows(parent, premierLigne, derniereLigne);
     
    	for (; premierLigne < derniereLigne; premierLigne++)
    	{
    		liste->removeAt(premierLigne);
    	}
     
    	endRemoveRows();
     
    	return true;
    }
     
    QStringList ModelListeChaineDrag::mimeTypes() const
    {
    	QStringList types;
     
    	types << "objet/x-liste-chaine";
     
    	return types;
    }
     
    QMimeData* ModelListeChaineDrag::mimeData(const QModelIndexList &indexes) const
    {
    	QMimeData *mimeData = new QMimeData();
    	QByteArray donneesEncodees;
     
    	QDataStream flux(&donneesEncodees, QIODevice::WriteOnly);
     
    	foreach (QModelIndex index, indexes)
    	{
    		if (true == index.isValid() )
    		{
    			flux << liste->at(index.row() );
    		}
    	}
     
    	mimeData->setData("objet/x-liste-chaine", donneesEncodees);
     
    	return mimeData;
    }
    ModelListeChaineDrop.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #ifndef MODEL_LISTE_CHAINE_DROP_H
    #define MODEL_LISTE_CHAINE_DROP_H
     
    #include <QAbstractListModel>
    #include <QList>
     
    class QMimeData;
     
    class ModelListeChaineDrop : public QAbstractListModel
    {
    	Q_OBJECT
     
    	private :
    		QList<QString> *liste;
     
    	public :
    		ModelListeChaineDrop(QList<QString> *listeChaines = new QList<QString>(), QObject *parent = 0);
     
    		int rowCount(const QModelIndex &parent = QModelIndex() ) const;
    		QVariant data(const QModelIndex &index, int role) const;
    		Qt::ItemFlags flags(const QModelIndex &index) const;
     
    		//bool setData(const QModelIndex &index, const QVariant &value, int role);
    		//bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
    		//bool insertRows(int row, int count, const QModelIndex &parent);
    		bool removeRows(int row, int count, const QModelIndex &parent);
     
    		bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
    		QMimeData* mimeData(const QModelIndexList &indexes) const;
    		QStringList mimeTypes() const;
    		Qt::DropActions supportedDropActions() const;
     
    		void ajouterChaine(QString chaine);
    };
     
    #endif
    ModelListeChaineDrop.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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    #include "ModelListeChaineDrop.h"
    #include <QMimeData>
    #include <QStringList>
     
    ModelListeChaineDrop::ModelListeChaineDrop(QList<QString> *listeChaines, QObject *parent)
    	: QAbstractListModel(parent), liste(listeChaines)
    {}
     
    int ModelListeChaineDrop::rowCount(const QModelIndex &parent) const
    {
    	return liste->count();
    }
     
    QVariant ModelListeChaineDrop::data(const QModelIndex &index, int role) const
    {
    	if (false == index.isValid() )
    	{
    		return QVariant();
    	}
     
    	if (liste->count() < index.row() )
    	{
    		return QVariant();
    	}
     
    	if (Qt::DisplayRole != role)
    	{
    		return QVariant();
    	}
     
    	return liste->at(index.row() );
    }
     
    Qt::ItemFlags ModelListeChaineDrop::flags(const QModelIndex &index) const
    {
    	if (true == index.isValid() )
    	{
    		return QAbstractItemModel::flags(index);
    	}
    	else
    	{
    		return Qt::ItemIsDropEnabled | QAbstractItemModel::flags(index);
    	}
    }
    /*
    bool ModelListeChaineDrop::setData(const QModelIndex &index, const QVariant &value, int role)
    {
    	if (true == index.isValid() && Qt::EditRole == role)
    	{
    		liste->replace(index.row(), value.toString() );
     
    		emit dataChanged(index, index);
     
    		return true;
    	}
     
    	return false;
    }
     
    bool ModelListeChaineDrop::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
    {
    	for (int role = Qt::UserRole; role < roles.count(); role++)
    	{
    		if (true == roles.contains(role) )
    		{
    			this->setData(index, roles[role], role);
    		}
    	}
     
    	return true;
    }
     
    bool ModelListeChaineDrop::insertRows(int row, int count, const QModelIndex &parent)
    {
    	beginInsertRows(parent, row, row + count - 1);
     
    	for (int i = 0; i < row; i++)
    	{
    		liste->insert(i, "");
    	}
     
    	endInsertRows();
     
    	return true;
    }
    */
    bool ModelListeChaineDrop::removeRows(int row, int count, const QModelIndex &parent)
    {
    	if (true == parent.isValid() )
    	{
    		return false;
    	}
     
    	if (liste->count() <= row || row + count <= 0)
    	{
    		return false;
    	}
     
    	int premierLigne = qMax(0, row);
    	int derniereLigne = qMin(row + count - 1, liste->count() - 1);
     
    	beginRemoveRows(parent, premierLigne, derniereLigne);
     
    	for (; premierLigne < derniereLigne; premierLigne++)
    	{
    		liste->removeAt(premierLigne);
    	}
     
    	endRemoveRows();
     
    	return true;
    }
     
    QStringList ModelListeChaineDrop::mimeTypes() const
    {
    	QStringList types;
     
    	types << "objet/x-liste-chaine";
     
    	return types;
    }
     
    QMimeData* ModelListeChaineDrop::mimeData(const QModelIndexList &indexes) const
    {
    	QMimeData *mimeData = new QMimeData();
    	QByteArray donneesEncodees;
     
    	QDataStream flux(&donneesEncodees, QIODevice::WriteOnly);
     
    	foreach (QModelIndex index, indexes)
    	{
    		if (true == index.isValid() )
    		{
    			flux << liste->at(index.row() );
    		}
    	}
     
    	mimeData->setData("objet/x-liste-chaine", donneesEncodees);
     
    	return mimeData;
    }
     
    bool ModelListeChaineDrop::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
    {
    	if (false == data->hasFormat("objet/x-liste-chaine") )
    	{
    		return false;
    	}
     
    	if (Qt::IgnoreAction == action)
    	{
    		return false;
    	}
     
    	int derniereLigne;
     
    	if (false == parent.isValid() )
    	{
    		if (0 > row)
    		{
    			derniereLigne = liste->count();
    		}
    		else
    		{
    			derniereLigne = qMin(row, liste->count() );
    		}
    	}
    	else
    	{
    		derniereLigne = parent.row();
    	}
     
    	QByteArray donneesEncodees = data->data("objet/x-liste-chaine");
    	QDataStream flux(&donneesEncodees, QIODevice::ReadOnly);
     
    	for (; false == flux.atEnd(); derniereLigne++)
    	{
    		QString chaine;
     
    		flux >> chaine;
     
    		beginInsertRows(QModelIndex(), derniereLigne, derniereLigne);
    			liste->insert(derniereLigne, chaine);
    		endInsertRows();
    	}
     
    	return true;
    }
     
    Qt::DropActions ModelListeChaineDrop::supportedDropActions() const
    {
    	return Qt::CopyAction | Qt::MoveAction;
    }
    Mon but n'est pas d'utiliser le D&D vers ou depuis d'autres applications mais juste entre deux vues (qui peuvent être de différents types) correspondant à deux modèles différents (et au final des modèles de différents types).

    Merci d'avance de votre aide pour m'aider à comprendre ce que je ne fait pas correctement.
    Je vous demanderais de ne pas me donner de solution toutes faites mais plutôt de me guider vers la solution.

    Bonne journée.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Salut,
    Je viens juste de mettre en place pour la premiere fois le d&d avec qt, et je me suis pas pris la tete comme toi...
    J'ai suivi la doc, redéfini les méthodes evennementielles, et ça passe bien.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je viens de réussir aussi au bout de quatre jours ! ><

    Je n'avais simplement pas redéfinis les méthodes dragEnterEvent et dragMoveEvent pour ma liste...

    Pour ceux qui ont des problèmes similaires voilà un exemple qui fonctionne :

    ModeleListe.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
    17
    18
    19
    #ifndef MODELE_LISTE_H
    #define MODELE_LISTE_H
     
    #include <QAbstractListModel>
     
    class ModeleListe : public QAbstractListModel
    {
    	private :
    		QList<QString> liste;
     
    	public :
    		ModeleListe(QObject *parent = 0);
     
    		int rowCount(const QModelIndex &parent) const;
    		QVariant data(const QModelIndex &index, int role) const;
    		Qt::ItemFlags flags(const QModelIndex &index) const;
    };
     
    #endif
    ModeleListe.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
    #include "ModeleListe.h"
     
    ModeleListe::ModeleListe(QObject *parent)
    	: QAbstractListModel(parent)
    {
    	for (int i = 0; i < 6; i++)
    	{
    		liste.append(QString("Chaine %1").arg(i) );
    	}
    }
     
    int ModeleListe::rowCount(const QModelIndex &parent) const
    {
    	return liste.count();
    }
     
    QVariant ModeleListe::data(const QModelIndex &index, int role) const
    {
    	if (false == index.isValid() )
    	{
    		return QVariant();
    	}
     
    	if (Qt::DisplayRole != role)
    	{
    		return QVariant();
    	}
     
    	if (index.row() >= liste.count() )
    	{
    		return QVariant();
    	}
     
    	return liste.at(index.row() );
    }
     
    Qt::ItemFlags ModeleListe::flags(const QModelIndex &index) const
    {
    	if (true == index.isValid() )
    	{
    		return Qt::ItemIsDragEnabled | QAbstractItemModel::flags(index);
    	}
    	else
    	{
    		return QAbstractItemModel::flags(index);
    	}
    }
    ModeleTable.h
    ModeleTable.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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #include "ModeleTable.h"
    #include <QDragEnterEvent>
    #include <QDropEvent>
     
    ModeleTable::ModeleTable(QObject *parent)
    	: QAbstractTableModel(parent)
    {
    	for (int colonne = 0; colonne < 4; colonne++)
    	{
    		QList<QString> sousListe;
     
    		for (int ligne = 0; ligne < 5; ligne++)
    		{
    			sousListe.append("");
    		}
     
    		liste.append(sousListe);
    	}
    }
     
    int ModeleTable::rowCount(const QModelIndex &parent) const
    {
    	return liste.first().count();
    }
     
    int ModeleTable::columnCount(const QModelIndex &parent) const
    {
    	return liste.count();
    }
     
    QVariant ModeleTable::data(const QModelIndex &index, int role) const
    {
    	if (false == index.isValid() )
    	{
    		return QVariant();
    	}
     
    	if (Qt::DisplayRole != role)
    	{
    		return QVariant();
    	}
     
    	if (index.column() >= liste.count() )
    	{
    		return QVariant();
    	}
    	else if(index.row() >= liste.first().count() )
    	{
    		return QVariant();
    	}
     
    	return liste.at(index.column() ).at(index.row() );
    }
     
    bool ModeleTable::setData(const QModelIndex &index, const QVariant &value, int role)
    {
    	//if (true == index.isValid() && Qt::EditRole == role)
    	if (true == index.isValid() )
    	{
    		liste[index.column()].replace(index.row(), value.toString() );
     
    		emit dataChanged(index, index);
    	}
     
    	return true;
    }
     
    Qt::ItemFlags ModeleTable::flags(const QModelIndex &index) const
    {
    	return QAbstractItemModel::flags(index) | Qt::ItemIsDropEnabled;
    }
    VueListe.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
    #ifndef VUE_LISTE_H
    #define VUE_LISTE_H
     
    #include <QListView>
     
    class VueListe : public QListView
    {
    	protected :
    		void dragEnterEvent(QDragEnterEvent *evenement);
    		void dragMoveEvenet(QDragMoveEvent *evenement);
     
    	public :
    		VueListe(QWidget *parent = 0);
    };
     
    #endif
    VueListe.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
    #include "VueListe.h"
    #include <QDragEnterEvent>
    #include <QDragMoveEvent>
     
    VueListe::VueListe(QWidget *parent)
    	: QListView(parent)
    {
    	setDragEnabled(true);
    }
     
    void VueListe::dragEnterEvent(QDragEnterEvent *evenement)
    {
    	evenement->acceptProposedAction();
    }
     
    void VueListe::dragMoveEvenet(QDragMoveEvent *evenement)
    {
    	evenement->acceptProposedAction();
    }
    main.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
    #include <QApplication>
    #include <QWidget>
    #include <QHBoxLayout>
    #include <QTableView>
     
    #include "VueListe.h"
    #include "ModeleTable.h"
    #include "ModeleListe.h"
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
     
    	QWidget *widget = new QWidget();
    		widget->setMaximumHeight(195);
    		widget->setMinimumWidth(545);
     
    		QHBoxLayout *layout = new QHBoxLayout(widget);
     
    			VueListe *vueListe = new VueListe(widget);
    				ModeleListe *modeleListe = new ModeleListe(vueListe);
    				vueListe->setModel(modeleListe);
    				vueListe->setMaximumWidth(100);
     
    			QTableView *vueTable = new QTableView(widget);
    				ModeleTable *modeleTable = new ModeleTable(vueTable);
    				vueTable->setModel(modeleTable);
    				vueTable->setAcceptDrops(true);
     
    	layout->addWidget(vueListe);
    	layout->addWidget(vueTable);
     
    	widget->show();
     
    	return app.exec();
    }

    Voici un lien vers l'archive contenant les sources :
    http://toxico.angel.free.fr/DragDropListeTable.7z

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/02/2020, 19h57
  2. Query rewrite avec les vues matérialisées
    Par h_ismaili dans le forum SQL
    Réponses: 16
    Dernier message: 06/06/2008, 08h49
  3. PB avec les vues
    Par cissou06 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 22/05/2008, 18h07
  4. SWT : Table : se déplacer avec les fleches (touches de)
    Par alain_m dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 16/06/2007, 23h22
  5. RCP, probleme avec les vues
    Par stachus dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 23/02/2007, 09h39

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