В моей программе у меня есть ряд вкладок и выиграл каждую вкладку, есть поле со списком и 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
, Как мне решить эту проблему? Я что-то не так кодирую?
Поэтому я исправил свою ошибку;
То, что я делал неправильно, было то, что я пытался получить доступ к пунктам на 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;
}
Других решений пока нет …