Отброшенная запись фактически представлена ​​после удаления еще одного рядаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Отброшенная запись фактически представлена ​​после удаления еще одного ряда

Сообщение Anonymous »

qt 6.8.0 под Ubuntu 24.10.
i есть qtableview < /code>, который показывает содержимое qsqltablemodel < /code> (sqlite).
стратегия редактирования установлена ​​на onrowchange < /code> и использование двух qpushbutton я позволяю пользователю добавлять новую запись или удалить одну.
Как воспроизвести проблему
  • Добавить новую запись и редактировать по своему усмотрению < /li>
    < /ol>


    Не отправляйте его, т.е. нажмите esc отбросить текущее редактирование
< /p>
  • Добавить еще раз новую запись и редактировать по своему желанию < /li>
    < /ol>
    [

    Отправить его, т.е. = "https://i.sstatic.net/gq6wf9iz.png"/>

    Удалить запись

ожидаемое поведение
На шаге 2 мы отбросили текущее редактирование, и мы не . Шаг 5, после удаления представленного (на шаге 4) «Призрак» отброшенной записи на самом деле есть! 1 : если предыдущая запись не была отброшена, а представлена ​​(по любой причине), индекс должен быть 2 .
Вопросы < /p>
Что здесь происходит? Как предотвратить это нежелательное поведение? < /p>
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include
#include

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
QSqlRelationalTableModel *_model = nullptr;

private slots:
void add();
void remove();

};
#endif // MAINWINDOW_H

написанного значения. mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

connect(ui->btnAdd, &QPushButton::clicked, this, &MainWindow::add);
connect(ui->btnRemove, &QPushButton::clicked, this, &MainWindow::remove);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "mydb");
db.setDatabaseName("mydb.sql");
db.open();

QSqlQuery query("DROP TABLE IF EXISTS foo", db);
query.exec();

QString sql = "CREATE TABLE foo \
(variant TEXT NOT NULL, \
name TEXT NOT NULL, \
capacity INT NOT NULL DEFAULT '0', \
PRIMARY KEY (name));";

query.prepare(sql);
query.exec();

_model = new QSqlRelationalTableModel(this, db);
_model->setTable("foo");
_model->setEditStrategy(QSqlRelationalTableModel::OnRowChange);
ui->table->setSortingEnabled(false);

_model->select();

ui->table->setModel(_model);
ui->table->setItemDelegate(new QSqlRelationalDelegate(this));
ui->table->setFocusPolicy(Qt::TabFocus);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::add()
{
_model->insertRow(_model->rowCount());
QModelIndex index = _model->index(_model->rowCount() - 1, 0);
if (!index.isValid()) return;
ui->table->setCurrentIndex(index);
ui->table->edit(index);
}

void MainWindow::remove()
{
int row = ui->table->selectionModel()->currentIndex().row();
_model->removeRow(row);
_model->submitAll();
_model->select();
}

mainwindow.ui


MainWindow



0
0
800
600



MainWindow









Add






Remove






Qt::Orientation::Vertical



20
473









0
0
800
22










Подробнее здесь: https://stackoverflow.com/questions/793 ... nother-row
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • 2 ряда с регулировкой высоты второго ряда
    Anonymous » » в форуме CSS
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Как база данных sql будет представлена ​​в nosql?
    Anonymous » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Проверка, если была представлена ​​форма - PHP
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Swagger UI Web API документация представлена ​​в качестве строк?
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Проверка, если была представлена ​​форма - PHP
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»