QListWidgetItem指针导致程序崩溃

时间:2017-02-23 17:35:48

标签: c++ qt qlistwidget qlistwidgetitem

在我的程序中,我有一系列标签,并赢得每个标签,有一个组合框和QListWidget。我试图通过类型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);
 }

这可能是因为指针listItem指向无效位置或NULL。我该如何解决这个问题?我编码错了吗?

1 个答案:

答案 0 :(得分:0)

所以我修正了我的错误; 我错误的部分是我尝试使用QListWidget函数返回的值访问QComboBox::count()上的项目。 组合框内的项目数为8;但是对于给定QListWidget选择,此QComboBox上的数字项目为3.我通过添加另一个for循环来解决,以通过使用限制循环计数来遍历QListWidget上的项目QListWidget::count()

这是我的工作代码;

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