Russian Qt Forum

Qt => Вопросы новичков => Тема начата: BigHom от Август 02, 2013, 14:27



Название: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: 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);
}
}


Название: Re: QTableWidget - добавление строки и запись в добавленн
Отправлено: mutineer от Август 02, 2013, 14:37
на каком столбце ошибка возникает?

Тип ошибки тоже не помешает


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: BigHom от Август 02, 2013, 14:59
При выполнении программы ,записывая в ячейку - программа вылетает. Появлется сообщение, типа :   "инструкция ... обратилась по адресу 0х0000000. Память не может быть "read" ".
А если в старые ячейки записывать , то ошибка не возникает.


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: mutineer от Август 02, 2013, 15:02
item() возвращает нормальный указатель или нулевой?


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: mutineer от Август 02, 2013, 15:03
Видимо добавленная строка пустая и надо использовать setItem()


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: BigHom от Август 05, 2013, 12:16
item возвращает нулевой указатель.


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: gil9red от Август 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); // вставляем ячейку
  }


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: BigHom от Август 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-й адрес...


Название: Re: QTableWidget - добавление строки и запись в добавленную строку значений
Отправлено: mutineer от Август 09, 2013, 10:09
нужно создать новый QTableWidgetItem и засунуть его в ячейку