2012-01-30 3 views
1

Im un étudiant programmeur utilisant Qt pour développer une interface graphique pour le travail et j'ai rencontré un problème en utilisant le QTableWidget. J'ai une feuille de calcul faite à partir de ce widget qui prend diverses valeurs en tant qu'entrée de l'utilisateur. J'ai un champ QLineedit en dehors de cette feuille de calcul qui doit afficher la somme de toutes les valeurs dans la 9ème colonne. Dans ce cas, j'ai pensé qu'il serait préférable d'utiliser le cellchanged signal pour ajouter la 9e colonne ensemble et montrer définir le champ linedit à la somme de toutes ces cellules. Mon problème est quand je vais exécuter mon application, je reçois la sortie de l'application suivante et cette partie de mon travail ne marche pas GUI:QTableWidget; Utilisation du signal celllChanged

> Object::connect: No such slot InjectionDialog::addWeightSum(int,int) 
> Object::connect: (sender name: 'tableWidgetInjectionLocations') 
> Object::connect: (receiver name: 'InjectionDialog') 

Je me suis assuré à plusieurs reprises que cette fente existe en fait et est appelé correctement le meilleur de mes connaissances. Cependant je suis un étudiant et peut-être que je n'ai pas raison et maintenant je suis ici.

mon InjectionDialog.h contient les emplacements suivants;

private slots: 
    void accepted_Clicked(); 
    void cancel_Clicked(); 
    void useFluidiFileRdoBtn_Clicked(); 
    void useFluidSpecifiedValuesRdoBtn_Clicked(); 
    void useParticleiFileRdoBtn_Clicked(); 
    void useParticleSpecifiedValuesRdoBtn_Clicked(); 
    void particleInjectionRdoBtn_Clicked(); 
    void liquidDropletsRdoBtn_Clicked(); 
    void addWeightSum(int &row, int &col); 

mon injectiondialog.cpp contient ce qui suit.

InjectionDialog::InjectionDialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::InjectionDialog) 
{ 
    ui->setupUi(this); 
    connect(ui->pushButtonAccept, SIGNAL(clicked()), this, SLOT(accepted_Clicked())); 
    connect(ui->pushButtonCancel, SIGNAL(clicked()), this, SLOT(cancel_Clicked())); 
    connect(ui->radioButtonUseiFileFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidiFileRdoBtn_Clicked())); 
    connect(ui->radioButtonUseSpecifiedValuesFluidInjection, SIGNAL(clicked()), this, SLOT(useFluidSpecifiedValuesRdoBtn_Clicked())); 
    connect(ui->radioButtonUseiFileParticleInjection, SIGNAL(clicked()), this, SLOT(useParticleiFileRdoBtn_Clicked())); 
    connect(ui->radioButtonUseSpecifiedValuesParitcleInjection, SIGNAL(clicked()), this, SLOT(useParticleSpecifiedValuesRdoBtn_Clicked())); 
    connect(ui->tableWidgetInjectionLocations, SIGNAL(cellChanged(int,int)), this, SLOT(addWeightSum(int &row, int &col))); 

Mon dialogue d'injection inclut également ma fonction pour ajouter cette colonne; c'est comme suit:

void InjectionDialog::addWeightSum(int &row, int &col) 
{ 
    double weightSum; 
    double totalWeightSum; 
    QString tempstr; 
    bool check; 
    if(col == 9) 
    { 
     for (int i = 0; i < ui->tableWidgetInjectionLocations->rowCount(); i++) 
     { 
      if (ui->tableWidgetInjectionLocations->item(i,9)->text() != "") 
      { 
       tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text(); 
       weightSum = tempstr.toDouble(&check); 
       if(check == false) 
       { 
        ui->lineEditWeightSum->setText("Error"); 
        break; 
       } 
       else 
       { 
        totalWeightSum += weightSum; 
       } 
      } 
     } 
     ui->lineEditWeightSum->clear(); 
     tempstr.append(QString("%1").arg(totalWeightSum)); 
     ui->lineEditWeightSum->setText(tempstr); 
    } 

} 

Ce problème peut être causé par quelque chose de simple que je ne vois pas. J'apprécie toute aide que vous pouvez offrir. Veuillez ne laisser que des commentaires constructifs, car je ne suis intéressé qu'à améliorer et à atteindre mes objectifs ici. À cet égard, j'apprécie toutes les tentatives d'assistance et je vous remercie d'avoir lu ceci.

+1

Je ne suis pas expérimenté à Qt mais peut-être le problème est les références. Avez-vous essayé de réécrire addWeightSum pour obtenir les arguments passés par valeur au lieu de référence? – Nobody

+0

En effet, j'ai fait, même question .. ce qui me fait penser que l'application ne va même pas si loin. parce que je devrais avoir une erreur avec l'une de ces méthodes –

+3

Avez-vous nettoyé le projet? Peut-être que votre environnement de construction est pollué par les anciens binaires qui introduisent des erreurs. Bien que cela soit hautement improbable. – Nobody

Répondre

2

Les signatures de tranche de signal sont différentes. Dans votre déclaration de void addWeightSum(int &row, int &col); vous avez mis des références. Retirez-les. void addWeightSum(int row, int col);

+0

Je ne vois pas où les signatures diffèrent; J'étais également sous l'idée que j'avais besoin de référencer cette valeur car elle provient du signal cellchanged. J'ai enlevé mon & et couru un nettoyage avant de compiler et je reçois toujours la même sortie d'application chaque fois que je lance la boîte de dialogue. –

+1

Cela me surprendrait, pouvez-vous poster l'en-tête mis à jour pour votre classe – Neox

+0

J'ai effectivement résolu ceci; Le problème était les paramètres dans l'instruction connect. Pour une raison quelconque, cela ne fonctionne qu'avec int, int dans les deux ensembles de paramètres. Étrange. Merci de votre aide. –