Copier-coller et QTableWidget
Bonsoir,
Je cherche à faire un copier-coller à partir d'un QTableWidget.
J'ai deux SLOTs appelés à partir de mon menu
voici mon code posant problème:
Code:
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
|
...
// déclaration qtablewidget
QTableWidget* tableau;
tableau=new QTableWidget();
tableau->setRowCount(10);
tableau->setColumnCount(10);
hboxlayout->addWidget(tableau);
...
void copier()
{
QString texte=tableau->currentItem()->text();
QClipboard *clipboard=QApplication::clipboard();
clipboard->setText(texte);
}
void coller()
{
QClipboard *clipboard=QApplication::clipboard();
QString texte=clipboard->text();
char* str=texte.toLocal8Bit().data();
printf("valeur de 'texte' dans fonction coller : %_n",str);
tableau->currentItem()->setText(texte);
} |
j'ai un segmentation fault lié à la ligne :tableau->currentItem()->setText(texte);
si je la commente, ça fonctionne mais bien sûr sans faire de copie.
Ca ne vient pas de la recup du contenu du clipboard j'ai ajouté les lignes
char* str=texte.toLocal8Bit().data();
printf("valeur de 'texte' dans fonction coller : %_n",str);
pour vérifier la recup du clipboard.
Je pense que àa vient du currentitem qui n'est plus valable car j'ai sélectionne une autre case avant de lancer le SLOT coller(), mais je ne comprend pas pourquoi.
Info complémentaire si je ne change pas de cellule, et que je coller() est appelé : pas de plantage.
Merci pour votre aide.
j'ai compris maintenant je cherche la solution
Je pense avoir compris.
voila ce que j'ai compris :
Le qtablewidget peut être vu shematiquement comme un tableau ligne-colomnes contenant des objets qtablewidgetitems.
Les cases contenant les qwidgetitems sont nulles ( non initialisés ) lors de la création du qtablewidget
le fait de saisir du texte dans une case en étant dessus avec le clavier crée un qtablewidget rempli et met son adresse dans la case du "tableau" qtablewidget ou modifie son contenu si il y a déjà un qtablewidgetitem aux coordonnées
Le fait d'appeler une case contenant un qtablewidget non initialisé provoque logiquement mon segfault.
Pour solutionner mon prob, je pense préremplir mon tableau lors de sa création
( vu qu'il fait 10x10 ) j'ai testé le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10
|
tableau=new QTableWidget();
tableau->setRowCount(10);
tableau->setColumnCount(10);
for (boucle=1;boucle==5;boucle++)
{
item=new QTableWidgetItem();
item->setText("a");
tableau->setItem(1,boucle,item);
} |
mon but est de remplir en partie une ligne de mon qtablewidget avec des a à des fins de tests.
Ca ne fonctionne pas, je continue de chercher ..
si qq1 peut m'éclairer j'aprécierais
quand j'aurais réussi cela, je pourrais toujours tester si les coordonnées contiennent un qtablewidgetitem, et le créer si besoin, si il existe je modifierais seulement son contenu.