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 :

[QTableView] selection multiple--> Qclipboard

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut [QTableView] selection multiple--> Qclipboard
    Bonjour,
    Je désirerais récupérer les informations selectionnées dans une QTableView pour les copiés dans le presse-papier(clipboard).

    Je n'arrive pas à le faire de manière simple donc j'essaie de le faire à la main.
    c'est à dire générer les éléments de la façon suivante
    case 1 /t case2 /n case 3
    .

    J'arrive à affiché tout les éléments mais je n'arrive pas à récupéré le nombre de colonnes selectionnées c'est bête mais rien ne marche.. donc si vous avez une idée..

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void centralePath::createCountry()
    {	
    	QItemSelectionModel* pSelectedItems = countryView->selectionModel();
     
    	//int numCol = countryView->currentIndex().column(); //retourne 1
    	//int numCol = pSelectedItems->model()->columnCount(); //retourne le nombe de colonne du model de base
    	QModelIndexList SelectedItemList = pSelectedItems->selectedIndexes();
     
     
    	copierTableau(SelectedItemList, numCol);
     
    }
    Bon ici l'algo pour bien placer les cases n'est pas bon mais ce n'est pas l'important pour l'instant
    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
     
    void centralePath::copierTableau(QModelIndexList& myList, int numCol)
    {
     
    	QString valTab;
    	for (int i=0; i<myList.count(); i++)
    	{
    		if(i == numCol)
    			valTab += " \n ";
     
    		QModelIndex val= myList.at(i);
    		valTab += val.data().toString() + " \t ";
    	}
     
    	QClipboard* copier = QApplication::clipboard();
    	copier->setText(valTab);
     
    }
    merci beaucoup...

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Salut,
    bon alors je n'ai pas trouvé de méthode propre alors je l'ai fais comme je pouvais... donc je vais vous passé ma solution pour tout ce qui lutte comme moi sur ce problème.
    Ce n'est pas une solution optimisé du tout mais bon faute de mieux... on fait avec.

    bon alors j'ai redéfinit la classe QTableView et normalement on l'utilisant à la place de l'autre le copier marche.

    QTableViewSpe.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
    37
    38
    39
    40
     
     
     
    #ifndef HEADER_QTABLEVIEWSPE
    #define HEADER_QTABLEVIEWSPE
     
    #include <QTableView>
    #include <QKeyEvent>
    #include <QMessageBox>
    #include <QClipboard>
    #include <QModelIndexList>
    #include <QModelIndex>
    #include <QItemSelectionModel>
    #include <QApplication>
     
     
    class QTableViewSpe: public QTableView
    {
    	Q_OBJECT
    	public:
    		QTableViewSpe(QWidget *parent = 0);
    		void keyPressEvent(QKeyEvent *event);
     
    	public slots:
     
    		void loadCol(const QModelIndex& indy);
    		void eraseCol(const QModelIndex& indy);
     
     
     
    	protected:
    		void copierTableauInvers(QModelIndexList& myList, int numCol);
    		void copierTableauNormal(QModelIndexList& myList, int numCol);
    		int numColSelect();
    		int numColMin;
    		int numColMax;
     
    };
     
    #endif
    et voici QTableViewSpe.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
     
     
     
    #include "QTableViewSpe.h"
     
    QTableViewSpe::QTableViewSpe(QWidget *parent):QTableView(parent)
    {
    	//initialisation du mode de séléction des items ici par item et contigus
    	setSelectionBehavior(QAbstractItemView::SelectItems);
    	setSelectionMode(QAbstractItemView::ContiguousSelection);	
    	connect(this, SIGNAL(entered (QModelIndex)), this, SLOT(loadCol(QModelIndex)));
    	connect(this, SIGNAL(pressed (QModelIndex)), this, SLOT(eraseCol(QModelIndex)));
    }
     
    //ceci est lancé lorsque une touche de clavier est pressé
    void QTableViewSpe::keyPressEvent(QKeyEvent *event)
    {
    	//      CTRL + C
    	if (event->key() == Qt::Key_C && event->modifiers() & Qt::ControlModifier)
    	{
    		QItemSelectionModel* pSelectedItems = selectionModel();
    		QModelIndexList SelectedItemList = pSelectedItems->selectedIndexes();
    		copierTableauNormal(SelectedItemList, numColSelect());   //copie normale
    	}
    	//     CTRL + I
    else if (event->modifiers() & Qt::ControlModifier && event->key() == Qt::Key_I)
    	{
    		QItemSelectionModel* pSelectedItems = selectionModel();
    		QModelIndexList SelectedItemList = pSelectedItems->selectedIndexes();
    		copierTableauInvers(SelectedItemList, numColSelect());   // copie inverse
    	}
    	else {
    		QTableView::keyPressEvent(event);
    	}
    } 
     
    //le code la copie normale   l'algo permettant de placé les index dans le bon sens 
    void QTableViewSpe::copierTableauNormal(QModelIndexList& myList, int numCol)
    {
    	QString valTab = "";
    	int valTemp = myList.count()/ numCol;
     
    	for (int i=0; i<valTemp; i++)
    	{
    		valTab += myList.at(i).data().toString();
    		for (int j=2; j<=numCol; j++)
    		{
    			int pos = ((valTemp * (j-1))+i);
    			valTab += " \t " + myList.at(pos).data().toString();
    		}
    		if(i != (valTemp-1))
    			valTab += " \n ";
    	}
     
    	QClipboard* copier = QApplication::clipboard();
    	copier->setText(valTab);
    }
     
    //le code la copie normale   l'algo permettant de placé les index dans le mauvais sens 
    void QTableViewSpe::copierTableauInvers(QModelIndexList& myList, int numCol)
    {
     
    	QString valTab = "";
    	int valTemp = ((myList.count())/(numCol));
    	for (int i=0; i<myList.count(); i++)
    	{
    		QModelIndex val= myList.at(i);
    		if(i==0)
    		{
    			valTab += val.data().toString();
    		}else if((i)%valTemp == 0)
    			{
    				valTab += " \n "+val.data().toString();
    			}else{
    				valTab += " \t "+ val.data().toString();
    			}
    	}
    	QClipboard* copier = QApplication::clipboard();
    	copier->setText(valTab);
     
    }
     
    // ceci un est un slot chargé de calclulé le nombre de colonne selectionné c'est le coté lourd du programme    --> SIGNAL - entered
    void QTableViewSpe::loadCol(const QModelIndex& indy)
    {
    	if(indy.column() < numColMin )
    	{
    		numColMin = indy.column();
    	}else if(indy.column() > numColMax){
    		numColMax = indy.column();
    	}
    }
     
    // ceci remet les valeurs a zéro lorsque l'on commence une autre selection    --> SIGNAL - pressed
    void QTableViewSpe::eraseCol(const QModelIndex& indy)
    {
    	numColMin = numColMax = indy.column();
    	loadCol(indy);
    }
     
    //   petit calcul permettant de précisé le nombre de colonne avec nos 2 variables
    int QTableViewSpe::numColSelect()
    {		
    	return (numColMax - numColMin +1);
    }

    voila ça sa marche c'est pas terrible,je débute ^^
    j'espere que sa va aidé d'autre gens..
    mais il n'est pas finit non plus comme produit...
    bye

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

Discussions similaires

  1. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  2. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  3. [VB6] sélection multiple de colonne dans excel grâce à VB
    Par biquet dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/08/2004, 12h44
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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