2017-02-23 14 views
-1

내 프로그램에서 일련의 탭이 있고 각 탭에서 콤보 상자와 QListWidget이 표시됩니다. 나는 QListWidgetItem 유형의 포인터를 통해 QListWidget에있는 항목의 상태를 읽으려고합니다. 코드의이 시점에서 프로그램이 중단됩니다. 여기에 중단 점을 두 번 확인했기 때문에 프로그램이 여기에서 충돌하는 것은 확실합니다.QListWidgetItem 포인터로 인해 프로그램이 충돌 함

이것은 내 코드입니다.

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; 
} 

이 블록에서 프로그램이 충돌합니다.

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

이 아마 잘못된 위치 또는 NULL에 대한 포인터 때문에 listItem 점이다. 이 문제는 어떻게 해결합니까? 내가 잘못 코딩 한 거니?

+0

"이는 포인터 listItem이 잘못된 위치 또는 NULL을 가리키고 있기 때문일 수 있습니다." 아마? 그래서 게시하기 전에 디버거에서 이것을 확인하지 않으시겠습니까? 먼저 _exact_ 문제를 찾아냅니다. – MrEricSir

+0

디버거에서이 작업을 수행하는 방법을 설명해 주시겠습니까? 나는 Qt 프로그래밍이 처음이다. 나 자신을 배워라. 어떤 조언이 도움이 될까요? – Vino

+0

코드가 불완전합니다. 특히'main()'함수와 적어도 하나의'#include '함수가 빠져있는 것 같습니다. 코드를 [편집]하여 문제의 [mcve]가되도록 만드십시오. 그러면 문제를 재현하고 해결할 수 있습니다. 또한 [ask]를 읽어야합니다. –

답변

0

그래서 오류가 수정되었습니다. 제가 잘못하고있는 부분은 QComboBox::count() 함수가 반환 한 값을 사용하여 QListWidget에있는 항목에 액세스하려고했기 때문입니다. 콤보 상자 안의 항목 수는 8 개입니다. 이 QListWidget에 주어진 번호 항목은 주어진 QComboBox을 선택했습니다. QListWidget::count()을 사용하여 루프 수를 제한하여 QListWidget에있는 항목을 통해 다른 for 루프를 추가하여 해결했습니다.

다음은 제 작업 코드입니다.

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; 
}