Russian Qt Forum
Ноябрь 23, 2024, 22:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при удалении последней строки в QTableWidget  (Прочитано 7149 раз)
Larry
Гость
« : Февраль 27, 2011, 18:15 »

Добрый вечер, форумчане!Возникла такая проблема...Есть QTableWidget в который добавляются или удаляются строки...все работает и все хорошо, но когда удаляю последнюю строку программа падает...не могу понять почему это происходит. Удаляю с помощью
Код:
removeRow(int row)
Записан
maint
Гость
« Ответ #1 : Февраль 27, 2011, 19:44 »

можно попробовать обрабатывать ошибку
Код:
    if(model->removeRow(row) == false){
        QMessageBox::critical(this, "Ошибка",  model->lastError().text());
    }
может что и прояснится
Записан
Larry
Гость
« Ответ #2 : Февраль 27, 2011, 20:20 »

Хотел попробовать, но QTableWidget::removeRow(int row) ничего не возвращает,..к сожалению и не имеет метода lastError()...а жаль...Есть еще какие-нибудь варианты? Бьюсь уже второй день...пишет при падении:

Необработанное исключение в "0x004012fb" в "Telit.exe": 0xC0000005: Нарушение прав доступа при чтении "0x0000000c".

Все уже проверил, но не нашел ничего... Непонимающий
Записан
BRE
Гость
« Ответ #3 : Февраль 27, 2011, 20:24 »

А какие сигналы от этого QTableWidget ты обрабатываешь?
Записан
Larry
Гость
« Ответ #4 : Февраль 27, 2011, 20:30 »

я обрабатываю пока только один
Код:
itemSelectionChanged()
, я его использую не как таблицу, а как список со столбцами:)...Поэтому когда он испускает этот сигнал я выделяю полностью строку...А удаляю строку нажатием на кнопку...
Записан
BRE
Гость
« Ответ #5 : Февраль 27, 2011, 20:37 »

я обрабатываю пока только один
Код:
itemSelectionChanged()
...
А что внутри слота его обрабатывающего?
Записан
Larry
Гость
« Ответ #6 : Февраль 27, 2011, 20:52 »

Внутри слота вот это:
Код:
int row = m_pListButtons->currentItem()->row();
m_pListButtons->selectRow(row);
Записан
BRE
Гость
« Ответ #7 : Февраль 27, 2011, 20:56 »

Тогда все нормально - падать должно.  Улыбающийся

Посмотри чему равно:
Код
C++ (Qt)
m_pListButtons->currentItem()
 
при удалении последней строки и тебе станет все понятно.  Подмигивающий
Записан
Larry
Гость
« Ответ #8 : Февраль 27, 2011, 21:01 »

выдает -1,а почему Шокированный...и как это обойти?
Записан
BRE
Гость
« Ответ #9 : Февраль 27, 2011, 21:04 »

Как -1?  Шокированный
Должен 0 выдавать. Проверь еще раз.

Как это обойти.... Проверять и если 0, то ничего не делать.
Записан
trot
Гость
« Ответ #10 : Февраль 27, 2011, 21:09 »

-1 - потому что ничего не выделено. Вы удалили выделенную строку, вот и -1. Поэтому нужно заботиться, после удаления, куда выставлять курсор, если вообще его куда-то надо выставлять.
Записан
Larry
Гость
« Ответ #11 : Февраль 27, 2011, 21:14 »

но проверку куда добавить? в слот где происходит выделение, тогда не получится, как раз на строке
Код:
int row = m_pListButtons->currentItem()->row();
программа и падает...тогда как удалить последнюю строку?
Записан
Larry
Гость
« Ответ #12 : Февраль 27, 2011, 21:16 »

я в слоте удаления делаю проверку на ноль и если ноль, тогда ничего не выделяю, но все равно падает
Записан
BRE
Гость
« Ответ #13 : Февраль 27, 2011, 21:18 »

но проверку куда добавить? в слот где происходит выделение, тогда не получится, как раз на строке
Код:
int row = m_pListButtons->currentItem()->row();
программа и падает...тогда как удалить последнюю строку?
Код
C++ (Qt)
QTableWidgetItem *item = m_pListButtons->currentItem();
if( !item )
return;
 
int row = item->row();
m_pListButtons->selectRow(row);
 

или проще:
Код
C++ (Qt)
int row = m_pListButtons->currentRow();
if( row != -1 )
m_pListButtons->selectRow(row);
 
Записан
Larry
Гость
« Ответ #14 : Февраль 27, 2011, 21:33 »

Спасибо большое, все работает и не падает...извините за тугодумость, просто уже второй день сижу, все сделал, а это не смог и даже не предполагал где ошибка...БОЛЬШОЕ-БОЛЬШОЕ спасибо...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.203 секунд. Запросов: 20.