Qt - dodawanie i usuwanie wierszy

0

mam taki kod

bool MySqlQueryModel::insertRows(int position, int rows, const QModelIndex &index)
{
    Q_UNUSED(index);
    beginInsertRows(QModelIndex(), position, position + rows - 1);

    for (int row = 0; row < rows; ++row){
        qDebug()<<"wiersz" << rows;
    }

    endInsertRows();
    return true;
}
//! [4]

//! [5]
bool MySqlQueryModel::removeRows(int position, int rows, const QModelIndex &index)
{
    Q_UNUSED(index);
    beginRemoveRows(QModelIndex(), position, position + rows - 1);

    for (int row = 0; row < rows; ++row){

    }

    endRemoveRows();
    return true;
}

void MySqlQueryModel::addRow()
{
    insertRows(0,1,QModelIndex());
    qDebug()<< "dodaję wiersz";
}

void MySqlQueryModel::remRow()
{
    removeRows(0,1,QModelIndex());
    qDebug()<< "usuwam wiersz";
}

Czy ktoś z was będzie wiedział jak zrobić aby wiersze się dodawały i usuwały ? W sumie się dodają i usuwają ale to za sprawą dwóch funkcji addRow i remRow ale nie dodają się rekordy do bazy. czy coś trzeba jeszcze zrobić ?

0

Prawdopodobnie zrobiłeś dziedziczenie. Po co?
Przeczytałeś dokumentację rodzica? Przypuszczalnie jest to: QSqlQueryModel

QSqlQueryModel Class | Qt SQL 5.13.2

QSqlQueryModel Class

The QSqlQueryModel class provides a read-only data model for SQL result sets. More..

Czyli QSqlQueryModel przeznaczone tylko do czytania! (jak to przemyślisz to może zrozumiesz czemu)

QSqlTableModel Class | Qt SQL 5.13.2

QSqlTableModel Class

The QSqlTableModel class provides an editable data model for a single database table. More...

Działa tylko dla tablicy i dużo jest już zrobione za ciebie.

0
  1. tak, zrobiłem dziedziczenie
  2. tak, masz rację, ta klasa ma domyślnie ustawiony tryb tylko do odczytu ale można to zmienić za pomocą flagi Qt::ItemIsEditable jest nawet na to fajny przykład
  3. powyższy kod pochodzi z tego przykładu - najbardziej chodzi mi o dodawanie i usuwanie rekordów. Wiem co i w którym miejscu się wykonuje ale nie rozumiem jak to działa i jak mogę to zaadaptować do swojego programu bo są tam po dwie funkcje do usuwania rekordów i po dwie funkcje do dodawania rekordów
0

dobra, czas na małą chwilę prawdy - rzucacie mi jak z rękawa "czytaniem dokumentacji" no to ja was chciałbym zapytać o kilka kwestii z tym związanych:

  1. QSqlTableModel Class
    The QSqlTableModel class provides an editable data model for a single database table.

jeżeli ta klasa służy TYLKO DO JEDNEJ tabeli, to myślę, że padł słuszny wybór na QSqlQueryModel, mnie nie zadowala korzystanie z bazy tylko z jednej tabeli, chciałbym móc pobierać dane z wielu tabel za pomocą zapytań i wyświetlać je w jednej. No chyba, że czegoś nie rozumiem, więc może wyjaśnicie mi ?

Również mógłbym sobie zachcieć wyświetlić dwie zupełnie różne tabele w tym jednym widoku i móc je edytować. To po co powstała taka klasa ?

  1. The QSqlQueryModel class provides a read-only data model for SQL result sets.

ale niżej...

The model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags().

Skoro można włączyć edycję (wyżej podlinkowałem nawet przykład do tego), to dlaczego mam się ograniczać do klasy która QSqlTableModel obsłuży tylko jedną tabelę i jednocześnie nie obsłuży skomplikowanych zapytań do bazy ? na pewno czegoś nie wiem/nie rozumiem więc proszę o wyjaśnienie

Jeżeli waszym zdaniem ten model jest nieedytowalny, to po co powstała taka klasa ? Skoro ma większe możliwości wyświetlania danych z kilku tabel i miałby służyć tylko do wyświetlania ?

Przecież nikt nie chciałby takich ograniczeń kosztem czegoś...

Liczę na jakąś rzeczową dyskusję, bo naprawdę dużo można się nauczyć, a temat drążę sam i również komuś może się to przydać

1 użytkowników online, w tym zalogowanych: 0, gości: 1