Question

Je suis un programmeur étudiant utilisant QT pour développer une application d'interface graphique. J'utilise un Qtreeewidget pour afficher certaines propriétés stockées dans un vecteur. Dans la même fenêtre, j'ai les boutons éditer, copier et supprimer. Jusqu'à présent, les boutons fonctionnent pour faire ce dont ils ont besoin; Cependant, j'ai un problème quand rien n'est sélectionné. Mon programme termine de façon inattendue; Je devine une faute SEG. Je ne pense pas que je manipule correctement le courant actuel. Cependant La documentation de QT sur cela ne dit pas ce qui est retourné si rien n'est sélectionné. J'espérais donc quelqu'un avec plus d'expérience pour vous aider / éclairer celui-ci sur celui-ci. S'il y a quelque chose que vous aimez voir le côté du code inclus, demandez simplement. Voici mon code (pertinent):

#include "injectiongui.h"
#include "ui_injectiongui.h"
#include "injectiondialog.h"
#include "ui_injectiondialog.h"
#include "injectiondata.h"
#include <QMessageBox>

InjectionGUI::InjectionGUI(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::InjectionGUI)
{
    ui->setupUi(this);
    ui->groupBoxGlobalParticlesPerCell->hide();
    connect(ui->pushButtonEdit, SIGNAL(clicked()), this, SLOT(slotInjectionEdit()));
}

void InjectionGUI::buildTreeWidget() 
{   
   //Build or Refresh Tree Widget with info from the vector
}

void InjectionGUI::editInjection_Clicked(QTreeWidgetItem *itemToEdit) //Creates an Injection Dialog to edit an Item from the Vector
{
    QString converter = itemToEdit->text(0);
    int id = converter.toInt();
    InjectionDialog editInjectionDialog;
    InjectionData presetValues;
    if(itemToEdit == 0) // this was my attempt to handle nothing selected
    {
        QMessageBox invalidSelection;
        invalidSelection.setText("Error: No row selected to edit");
        return;
    }
    presetValues = qTreeInjectionData.at(id);
    editInjectionDialog.setData(presetValues);
    presetValues = editInjectionDialog.getData();
    editInjectionDialog.exec();
    qTreeInjectionData.replace(id, editInjectionDialog.transInjectionData);
    buildTreeWidget();
}

void InjectionGUI::slotInjectionEdit()
{
    editInjection_Clicked(ui->treeWidgetInjections->currentItem());
}

J'ai essayé d'utiliser Qdebug pour savoir ce qui est retourné, mais je pense que c'est avoir des problèmes d'obtenir la valeur de l'itemeedit parce que c'est un qwidgettreetitem. S'il vous plaît, laissez seulement des commentaires productifs car je ne suis intéressé que par l'apprentissage et surmonter le défi. Merci d'avance!

Était-ce utile?

La solution

Si aucun élément n'est sélectionné, vous devez supposer que la méthode currentItem() renvoie un pointeur NULL:

QString converter = itemToEdit->text(0);

Essayer d'appeler une méthode d'un pointeur NULL est un comportement indéfini et cela entraînera probablement une faute de segmentation.Donc, vous devriez ajouter quelque chose comme:

if(itemToEdit == NULL) {
  // error handling, most likely a simple return
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top