Проблем при сравняване на QTableWidgetItems с елементи на QStringList

Създавам QStringList от файл:

QFile myTextFile("/home/user/Desktop/file.txt");
QStringList myStringList;
if (!myTextFile.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(0, "Error opening file", myTextFile.errorString());
    }
else
    {  
        while(!myTextFile.atEnd())
        {
            myStringList.append(myTextFile.readLine());
        }
        myTextFile.close();
    }

... QTableWidget е създаден и попълнен, след това искам да маркирам тези елементи в ред 5, които съответстват на един от елементите в myStringList:

int rows = ui->tableWidget->rowCount();
for(int i = 0; i < rows; ++i)
{
    QString str1 = ui->tableWidget->item(i, 5)->text();
    if (myStringList->contains(str1))
    //if(ui->tableWidget->item(i, 5)->text() == "targetstring")
    {
        ui->tableWidget->item(i, 5)->setBackgroundColor(Qt::blue);
    }
}

Това се компилира, но има грешки при изпълнение. Таблицата съществува и към този момент е напълно попълнена. Ако изрично предам целевия низ (редът е коментиран), той работи добре, но трябва да го проверя спрямо StringList.

Оценявам всякакви предложения, подлудяха ме!


person user3891489    schedule 22.06.2015    source източник
comment
Обаждахте ли се на QTableWidget::setItem за всеки артикул? Какво извежда qDebug() << ui->tableWidget->item(i, 5)?   -  person Amartel    schedule 22.06.2015
comment
Да, всички клетки са зададени с помощта на setItem. Елементи, създадени с QTableWidgetItem *abcItem = new QTableWidgetItem(QString::fromStdString(abc.ToString())); .qDebug не работи, но QTextStream(stdout) ‹‹ ui-›tableWidget-›item(i, 5); ми дава много шестнадесетични безсмислици. Съдържанието на файла обаче се показва правилно, когато залепя QString listitems = myStringList.join(,) в изскачащо съобщение.   -  person user3891489    schedule 22.06.2015
comment
В последното парче код сте написали myStringList->. Това грешка при копиране и поставяне ли е или myStringList е указател? валидно ли е   -  person Amartel    schedule 22.06.2015
comment
Това беше указател, тъй като myStringList беше конструиран другаде. Излекувах проблема, като внесох кода на StringList в същата функция като кода за сравнение и премахнах посочването на променливите. Също така трябваше да добавя проверка „if (редове ›1)“ преди цикъла за итерация на реда, тъй като въпреки че таблицата беше напълно попълнена на екрана пред мен, по някакъв начин цикълът за търсене се изпълняваше преди каквото и да е приспособлението за таблица, което очевидно все още правеше . Благодаря за подсказката! О, и трябваше да 'QString listitems = myStringList.join();' и изпълнете проверката срещу това, не можах да го накарам да работи със списъка с низове.   -  person user3891489    schedule 22.06.2015


Отговори (1)


Ти каза:

I then want to mark those items in row 5

но в кода сте задали 5 колона:

QString str1 = ui->tableWidget->item(i, 5 <- here)->text();
QTableWidgetItem *  item(int row, int column) const

Мисля, че имате само една колона, така или иначе проверете размера на вашата таблица (редовете и колоните на изходната таблица се броят и я проверете, защото вашият код изглежда наистина опасен дори за прототип).

person UndeadDragon    schedule 22.06.2015
comment
Съжалявам, имах предвид колона! Определено насочвам дясната колона. - person user3891489; 22.06.2015
comment
Можете ли да ми дадете какво извежда qDebug() на qDebug() ‹‹ ui-›tableWidget-›rowCount() ‹‹ ui-›tableWidget-›columnCount()? и съдържанието на файла може би. - person UndeadDragon; 22.06.2015