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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget - добавление строки и запись в добавленную строку значений  (Прочитано 26130 раз)
BigHom
Гость
« : Август 02, 2013, 14:27 »

Есть таблица, добавляется строка и заносятся значения.
Вопрос: почему при записи значений setText(s2) - возникает ошибка?

{//добавить строку
   int i=ui.tableWidget->rowCount( );
   ui.tableWidget->insertRow(i); // добавление строк
    QString s2="1"; 
    for (int j=0;j<3;j++)
{
       (ui.tableWidget->item(i,j))->setText(s2);
}
}
Записан
mutineer
Гость
« Ответ #1 : Август 02, 2013, 14:37 »

на каком столбце ошибка возникает?

Тип ошибки тоже не помешает
« Последнее редактирование: Август 02, 2013, 14:44 от mutineer » Записан
BigHom
Гость
« Ответ #2 : Август 02, 2013, 14:59 »

При выполнении программы ,записывая в ячейку - программа вылетает. Появлется сообщение, типа :   "инструкция ... обратилась по адресу 0х0000000. Память не может быть "read" ".
А если в старые ячейки записывать , то ошибка не возникает.
Записан
mutineer
Гость
« Ответ #3 : Август 02, 2013, 15:02 »

item() возвращает нормальный указатель или нулевой?
Записан
mutineer
Гость
« Ответ #4 : Август 02, 2013, 15:03 »

Видимо добавленная строка пустая и надо использовать setItem()
Записан
BigHom
Гость
« Ответ #5 : Август 05, 2013, 12:16 »

item возвращает нулевой указатель.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Август 05, 2013, 15:57 »

Тема такая же уже поднималась =)
Перед тем как добавлять/изменять что то в таблице, нужно выделить память под это =)

Простейший пример создания таблицы:
Код:
tableWidget = new QTableWidget(this); // создаем
tableWidget->setRowCount(10); // указываем количество строк
tableWidget->setColumnCount(5); // указываем количество столбцов

// выделяем память под все ячейки таблицы
for(int row = 0; row < tableWidget->rowCount(); row++)
  for(int column = 0; column < tableWidget->columnCount(); column++) 
      tableWidget->setItem(row, column, new QTableWidgetItem()); 

Если вы слишком новичек, то можно подробнее описать код:
Код:
// выделяем память под все ячейки таблицы
for(int row = 0; row < tableWidget->rowCount(); row++)
  for(int column = 0; column < tableWidget->columnCount(); column++)
  { 
       QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку
       item->setText(QString("%1_%2").arg(row).arg(column)); // вставляем текст

       tableWidget->setItem(row, column, item); // вставляем ячейку
  }
Записан

BigHom
Гость
« Ответ #7 : Август 09, 2013, 06:46 »

Тема такая же уже поднималась =)
Перед тем как добавлять/изменять что то в таблице, нужно выделить память под это =)
В приведённом примере создаётся новая таблица?
В моём примере таблица создана с помощью QT Designer.  Заранее неизвестно сколько строк , по мере работы добавляются новые строки. Каждый раз старую таблицу удалять и новую создавать? Замечено , если в указанном примере программно добавить строку и потом вручную внести значения , то ошибок не возникает. А вот если программно вносить значения, то выдаёт нулевой адрес.

"tableWidget->setItem(row, column, item); // вставляем ячейку"
вместо item , что подставить в моём примере ?

       QTableWidgetItem * k=ui.tableWidget->item(i,j);
       ui.tableWidget->setItem(i,j,k);
       (ui.tableWidget->item(--i,j))->setText(s2); - при работе выдаёт ошибку - 0-й адрес...
« Последнее редактирование: Август 09, 2013, 06:51 от BigHom » Записан
mutineer
Гость
« Ответ #8 : Август 09, 2013, 10:09 »

нужно создать новый QTableWidgetItem и засунуть его в ячейку
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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