Добавление новой записи в QTableView
Ввожу данные в окошко, но по нажатию на кнопку в таблицу добавляется строка с пустыми значениями.

Как это исправить? Делаю при помощи QDataWidgetMapper.
Форма окна добавления.
#include "ui_tripaddform.h"
TripAddForm::TripAddForm(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::TripAddForm)
{
ui->setupUi(this);
mapper = new QDataWidgetMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
}
TripAddForm::~TripAddForm()
{
delete ui;
}
void TripAddForm::setModel(QStandardItemModel *model)
{
mapper->setModel(model);
mapper->addMapping(ui->trip_name, 0);
mapper->addMapping(ui->date_from, 1);
mapper->addMapping(ui->date_to, 2);
mapper->addMapping(ui->count_wagons, 3);
mapper->addMapping(ui->count_stop, 4);
mapper->addMapping(ui->count_tickets, 5);
mapper->addMapping(ui->count_tickets_sale, 6);
}
void TripAddForm::on_btn_accept_clicked()
{
mapper->model()->insertRow(mapper->model()->rowCount());
mapper->setCurrentModelIndex(mapper->model()->index(mapper->model()->rowCount() - 1, 0));
mapper->submit();
close();
}
Главное окно.
Инициализация
add_trip = new TripAddForm(this);
Вызов окна и передача модели.
void MainWindow::on_btn_add_trip_clicked()
{
add_trip->setModel(model_trip);
add_trip->show();
}
Ответы (1 шт):
К QTableView оно не имеет ни какого отношения. Проблема в том, что при
mapper->setCurrentModelIndex(mapper->model()->index(mapper->model()->rowCount() - 1, 0));
все поля ввода перезаписываются данными из модели (пустыми строками), а т.к. далее они ни как не изменяются, то строка так и остаётся пустой.
Выхода 2:
Или отказаться от использования
QDataWidgetMapperи вставлять все данные вручную в конце.Или вставлять пустую строку в модель заранее. Хорошее место, где это можно сделать — перегруженный слот
open()( при том, чтоTripAddFormнадо унаследовать отQDialog). Не забудь также удалить строку при отмене вставки.
