2017-02-23 2 views
-1

In meinem Programm habe ich eine Reihe von Registerkarten und gewann jede Registerkarte gibt es ein Kombinationsfeld und QListWidget. Ich versuche, den Status der Elemente auf der QListWidget durch einen Zeiger des Typs QListWidgetItem zu lesen. Das Programm stürzt an diesem Punkt des Codes ab. Ich bin sicher, dass das Programm hier abstürzt, da ich es mit Haltepunkten überprüft habe.QListWidgetItem Zeiger verursacht Programm zum Absturz

Dies ist mein Code;

void MainWindow::on_applyButton_clicked() 
{ 
//Reset list 
MainWindow::revenueList.clear(); 
QStringList itemList; 
itemList <<"Revenue growth" << "Cost of revenue growth" << "Operating income growth" 
     << "Net income growth" << "Total operating expense growth" << "Gross profit" 
     << "Operating profit" << "Net profit"; 

//Processing income statement 
//Loop through all itemsin ComboBox 
int items = ui->inc_st_comb->count(); 

for(int currentItem = 0; currentItem < items; currentItem++) 
{ 
    //Set to current index 
    ui->inc_st_comb->setCurrentText(itemList.at(currentItem)); 

    //Point to QListWidget Item and read checkbox 
    QListWidgetItem *listItem = ui->inc_st_list->item(currentItem); 

    if(listItem->checkState() == Qt::Checked) 
    { 
     MainWindow::revenueList.append(true); 
    } 
    else if (listItem->checkState() == Qt::Unchecked) 
    { 
     MainWindow::revenueList.append(false); 
    } 
} 

    qDebug() << "U: " << MainWindow::revenueList; 
} 

Das Programm stürzt bei diesem Block ab;

if(listItem->checkState() == Qt::Checked) 
{ 
     MainWindow::revenueList.append(true); 
} 
else if (listItem->checkState() == Qt::Unchecked) 
{ 
     MainWindow::revenueList.append(false); 
} 

Dies ist wahrscheinlich, weil der Zeiger listItem verweist auf einen ungültigen Ort oder NULL. Wie gehe ich bei diesem Problem vor? Codiere ich etwas falsch?

+0

"Dies liegt wahrscheinlich daran, dass der Zeiger listItem auf eine ungültige Position oder NULL zeigt." Wahrscheinlich? Warum verifizieren Sie dies nicht in Ihrem Debugger, bevor Sie auf SO veröffentlichen? Finden Sie das _exact_ Problem zuerst heraus. – MrEricSir

+0

Kannst du mir erklären, wie man das im Debugger macht? Ich bin neu in Qt Programmierung. Ich selbst lernen. Jeder Rat wäre hilfreich? – Vino

+0

Ihr Code ist unvollständig. insbesondere scheint es eine 'main()' Funktion und mindestens ein '# include' zu ​​fehlen. Bitte [bearbeiten] Sie Ihren Code, so dass es ein [mcve] Ihres Problems ist, dann können wir versuchen, es zu reproduzieren und zu lösen. Sie sollten auch [fragen] lesen. –

Antwort

0

Also habe ich meinen Fehler behoben; Der Teil, den ich falsch gemacht habe, war, dass ich versuchte, auf die Elemente auf QListWidget zuzugreifen, die den Wert verwenden, der von QComboBox::count() Funktion zurückgegeben wird. Die Anzahl der Elemente in der Kombinationsbox war 8; aber die Anzahl Punkte auf dieser QListWidget für eine gegebene QComboBox Auswahl war 3. Ich löste durch Hinzufügen einer anderen for-Schleife, um durch die Punkte auf der QListWidget Schleife durch die Begrenzung der Loop-Anzahl mit QListWidget::count().

Hier ist mein Arbeitscode;

void MainWindow::on_applyButton_clicked() 
{ 
//Reset list 
MainWindow::revenueList.clear(); 
QStringList itemList; 
itemList <<"Revenue growth" << "Cost of revenue growth" << "Operating income growth" 
     << "Net income growth" << "Total operating expense growth" << "Gross profit" 
     << "Operating profit" << "Net profit"; 

//Processing income statement 
//Loop through all itemsin ComboBox 
int items = ui->inc_st_comb->count(); 

for(int currentItem = 0; currentItem < items; currentItem++) 
{ 
    //Set to current index 
    ui->inc_st_comb->setCurrentText(itemList.at(currentItem)); 

    for(int index = 0; index < ui->inc_st_list->count(); index++) 
    { 
     //Point to QListWidget Item and read checkbox 
     QListWidgetItem *listItem = ui->inc_st_list->item(index); 


     if(listItem->checkState() == Qt::Checked) 
     { 
      MainWindow::revenueList.append(true); 
     } 
     else if (listItem->checkState() == Qt::Unchecked) 
     { 
      MainWindow::revenueList.append(false); 
     } 
    } 
} 

    qDebug() << "U: " << MainWindow::revenueList; 
} 
Verwandte Themen