QTableView проблемы со строкой - PullRequest
2 голосов
/ 07 мая 2011

Здравствуйте, ребята, я новичок в 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 & enter3_edit (это в другой функции / методе)

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

Спасибо за помощь!

1 Ответ

0 голосов
/ 07 мая 2011

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

При первом вызове add_tableview() все хорошо, list пусто, добавляет три QStandardItem указателя и используется для добавления строки с этими тремя элементами. Пока что бог.

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

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

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

...