#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