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 :

Modification de la valeur de QTableWidgetItem

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut Modification de la valeur de QTableWidgetItem
    Bonjour,

    J'ai une qtablewidget dans lequel on ne peut mettre que des entiers, j'utilise le signal itemChanged() pour que l'utilisateur modifie la valeur en double cliquant sur la case et en entrant la valeur.

    Je verifie si ce qu'il a entré est bien un entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int chiffre = item->text().toInt(&ok);
    if(!ok) throw 	QMessageBox::warning(this, "Attention","erreur" );
    J'ai 2 type d'affichage pour le tableau, la premiere est un bete affichage console ou je peux aussi interagir sans l'intergace graphique en mettant des valeur en indiquant la ligne, la colonne et la valeur. Et la deuxieme c'est mon Qtablewidget.
    Lorsque j'insere une valeur ac l'interaction console, le tableau a aussi changé, logique. Le probleme est que je recois plusieurs fois le meme message disant que le numéro placé est deja inscrit, comme s'il faisait appel plusieurs fois a la methode. Je connecte le signal et le slot seulement lors de la creation de la tablewidget

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(ui.graphiqueSudoku,SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(modifierCase(QTableWidgetItem *)));
    Je précice que j'ai 2 methode distinctes pour l'insertion de valeur, une pour la console l'autre pour la tablewidget

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void jeuSudoku::modifierCase(QTableWidgetItem * item){
    	bool ok;
    	int chiffre = item->text().toInt(&ok);
    	if(!ok) throw 	QMessageBox::warning(this, "Attention",item->text() );
    	try {
    		sudoku->placerChiffre(item->row(),item->column(), chiffre );
    	} catch (SudokuException &sudoExc) {
    		QMessageBox::warning(this, "Attention", sudoExc.what());
    	}
    }

    Merci d'avance pour l'aide

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Roe,

    Pour contrôler l'entrée, il est préférable (du moins à mon avis) d'utilser un validateur (QIntValidator dans ton cas).

    Je te laisse regarder la doc.


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Oui mais dance ce cas je fais comment pour le convertir en Int ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    J'ai aussi un autre probleme, j'aimeri creer un menu contextuel lors d'un clic droit pour par exemple efface une case.

    j'ai mis ceci lors de la creation du QTableWidget :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ui.graphiqueSudoku->setContextMenuPolicy(Qt::ActionsContextMenu);
    						connect(ui.graphiqueSudoku,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(menuEffacer(QPoint)));
    et dans la methode j'ai ecris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void jeuSudoku::menuEffacer(QPoint point){
    			QMenu menu(this);
    			QAction* effacer = new QAction(tr("Effacer"),this);
    			connect(effacer, SIGNAL(triggered()), this, SLOT(effacerCase()));
    			menu.addAction(effacer);
    			menu.exec(ui.graphiqueSudoku->mapToGlobal(point));
    }

    mais il faut avant que je detecte un clic droit, comment faire ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    J'ai réussi a réparer les multi message mais j'ai toujours un probleme d'event

    j'ai donc reimplementer :



    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
    bool jeuSudoku::eventFilter(QObject* object,QEvent* event)
    {
    	if( object == ui.graphiqueSudoku && event->type() == QEvent::KeyPress){
    		QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    		if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter){
    			modifierCase();
    			return true;
    		}
    	}
    	else if (object == ui.graphiqueSudoku && QEvent::MouseButtonPress == event->type()){
    		QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    		if(mouseEvent->button()==Qt::RightButton){
    			effacerCase();
    			return true;
    		}
    	}
     
    	else
    	{
    		return false;
    	}
    	return QObject::eventFilter(object,event);
    }
    et mis dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			ui.graphiqueSudoku->installEventFilter(this);
    			ui.graphiqueSudoku->setContextMenuPolicy(Qt::ActionsContextMenu);
    Mais des que j'appuie sur entree le prog crash :/ et le clic droit ne fonctionne pas du tout. une solution ?

Discussions similaires

  1. [XML] Modification de la valeur d'un attribut
    Par chrix10.2 dans le forum Général Python
    Réponses: 2
    Dernier message: 06/12/2006, 09h16
  2. modification de la valeur d'une cellule
    Par magictom42 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/10/2006, 17h22
  3. Base de registre : Blocage modification d'une valeur
    Par damsmut dans le forum Windows XP
    Réponses: 6
    Dernier message: 26/09/2006, 02h25
  4. [SQL] (PHP/SQL) Erreur de modification d'une valeur
    Par ymoreau dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/09/2006, 14h55
  5. [VB.NET] [XML] Modification d'une valeur
    Par kirk80 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 09/09/2004, 16h15

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