segfault при вызове QTableWidgetItem :: text ()

У меня проблемы с QTableWidget. Я пытаюсь получить данные из QTableWidget, когда пользователь изменил ячейку. Так что я использую

QObject::connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(checkPoints(int,int)));

Вот код контрольных точек

void MainWindow::checkPoints(int x, int y)
{
    QTableWidgetItem* item = ui->tableWidget->item(x,(1-y));
    if(!item || item->text().isEmpty())
    {
    }
    else
    {
        ajouterPoint(x);
    }
}

Я получаю segFault, когда вызываю item-> text () и мое приложение дает сбой. Я проверил x = 0 и 1-y = 1. Я уже проверял несколько сообщений о подобных проблемах, и, похоже, это связано с фокусом. Но я действительно не знаю, что там делать. Спасибо за помощь.


person Avatar36    schedule 06.03.2015    source источник
comment
Вместо этого должно быть if(!item && item->text().isEmpty()). А почему вы используете 1-y, а не y?   -  person vahancho    schedule 06.03.2015
comment
@vahancho if(!item && item->text().isEmpty() сделает доступ к недопустимому указателю. Это проверит, является ли элемент нулевым, и если это так, он попытается получить доступ к члену text.   -  person thuga    schedule 06.03.2015
comment
1-й, потому что мой QWidgetItem имеет 2 столбца, и я хочу проверить другую ячейку в той же строке, что и измененная мной. Поэтому, если я выбираю столбец 1, я проверяю 1-y = 0, а если я выбираю столбец 0, я проверяю столбец 1-y = 1.   -  person Avatar36    schedule 06.03.2015
comment
@vahancho: этот код работает хорошо, когда я читаю всю таблицу с помощью while (! ((! itemX || itemX- ›text (). isEmpty ()) && (! itemY || itemY-› text (). isEmpty ()))) {i ++; itemX = ui- ›tableWidget-› item (i, 0); itemY = ui- ›tableWidget-› item (i, 1); }   -  person Avatar36    schedule 06.03.2015
comment
эта проблема не решена: /   -  person Avatar36    schedule 10.03.2015


Ответы (1)


Я ничего не менял, но сейчас работает. Похоже, это правильный способ сделать это. Возможно, проблема возникла где-то еще в моем коде, который я изменил (я просто добавил эту часть в качестве комментария во время своих модификаций).

person Avatar36    schedule 19.03.2015