Как установить новый элемент в tabview Qt и сохранить предыдущие - PullRequest
0 голосов
/ 03 ноября 2018

Когда я использую Qt tableView, я могу просто установить элемент в первом ряду. Когда я нажимаю add, он покрывает первый, но не устанавливает новый элемент. Возможно, моя функция слота неверна. Но я не знаю, как с этим справиться.

void Widget::on_addButton_clicked()
{   int i = 0;
    EditDialog editDialog(this);
    if(editDialog.exec() == 1)
    {
        model->setItem(i,0,new QStandardItem(editDialog.getID()));
        model->setItem(i,1,new QStandardItem(editDialog.getPriority()));
        model->setItem(i,2,new QStandardItem(editDialog.getTime()));
    }
    i++;
}

1 Ответ

0 голосов
/ 03 ноября 2018

Пожалуйста, посмотрите в док. QStandardItemModel::setItem() * * 1004

Устанавливает элемент для данной строки и столбца в элемент. Модель берет на себя владение предметом. При необходимости количество строк и столбцов увеличивается для соответствия элементу. Предыдущий элемент в данном месте (если он был) удаляется.

(Подчеркиваю мое.)

Если строка должна быть вставлена ​​до конца таблицы (например, как первая), то это необходимо сделать явно.

Это может быть достигнуто путем вызова QStandardItemModel::insertRow() перед настройкой элементов.

Это может быть, например, выглядеть так:

// fills a table model with sample data
void populate(QStandardItemModel &tblModel, bool prepend)
{
  int row = tblModel.rowCount();
  if (prepend) tblModel.insertRow(0);
  for (int col = 0; col < NCols; ++col) {
    QStandardItem *pItem = new QStandardItem(QString("row %0, col %1").arg(row).arg(col));
    tblModel.setItem(prepend ? 0 : row, col, pItem);
  }
}

Я взял это из моего старого поста. Полный пример можно найти в моем ответе на SO: остановить прокрутку QTableView при добавлении данных выше текущей позиции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...