Проблемы с QTableView из-за строки

#qt #row #qtableview

#qt #строка #qtableview

Вопрос:

Привет, ребята, я новичок в QT, и я делаю Qtableview, чтобы добавить информацию в 3 столбца в бесконечную строку, например

 |--1--|--2--|--3--|

|--1--|--2--|--3--|

|--1--|--2--|--3--|
  

это то, как я хочу вставить / добавить строку, но это то, что я получаю после функций вставки / добавления строки.

 |--1--|--2--|--3--|

|-----|-----|-----||--1--|--2--|--3--|

|-----|-----|-----||-----|-----|-----||--1--|--2--|--3--|
  

я получаю пустые пробелы и увеличенное количество столбцов

я использую QStandardItemmodel для модели это код, который создает элемент модели

 void tableview::add_tableview() //this is used to add data to tableview
{
    //to get data from line edit in add window
    QStandardItem *item_1 = new QStandardItem(QString(enter1_edit->text()));
    QStandardItem *item_2 = new QStandardItem(QString(enter2_edit->text()));
    QStandardItem *item_3 = new QStandardItem(QString(enter3_edit->text()));

     list << item_1 << item_2 << item_3;

     model->appendRow(list);

    //to set the model
    main_tableview->setModel(model);
}
  

Значения в строках добавляются с помощью qlineedit enter1_edit,enter2_edit amp; enter3_edit (это в другой функции / методе)

main_tableview является ли объект qtableview

Спасибо, что помогли мне!

Комментарии:

1. Я думаю, вам нужно предоставить дополнительную информацию: что такое list ? Вы очищаете его после каждого использования? Что вы имеете в виду относительно QLineEdit ?

Ответ №1:

Динь-динь-динь, я понял. Я безуспешно пытался воспроизвести вашу проблему, пока не попробовал кое-что…неоптимально :). Ваш list случайно не глобальный объект? Если да (и я предполагаю, что это так), вы продолжаете добавлять в него элементы.

При первом вызове add_tableview() all is good, list является пустым, добавляет три QStandardItem указателя и используется для добавления строки с этими тремя элементами. Пока так, боже.

Вы вызываете add_tableview() снова, теперь вы создаете еще три QStandardItem файла и добавляете их в список (который все еще содержит три из последнего вызова). Вызов appendRow() фактически пытается вставить шесть элементов, из которых первые три уже существуют в модели. И, как вы знаете, вы не должны добавлять один и тот же указатель элемента в модель дважды. К счастью, Qt не завершает работу, но вставляет три пустых столбца для указателей элементов, которые уже есть в нем.

Решение: В конце вашего add_tableview() вызова метода list.clear() или используйте локальную переменную для списка. Накладные расходы должны быть минимальными.

С наилучшими пожеланиями
D