Dostęp do QlineEdit innego formularza w QT

0

cześć
Jak mogę uzyskać dostęp do danych wpisanych w innym formularzu? Jest możliwość zrobić w tym przypadku friend class? Jest to prawidłowe podejście? Jak to zrobić?

void MainWindow::on_pbEdytujKlienta_clicked()
{
    edytujklienta klient;
    klient.setModal(true);
    klient.exec();
    

   // QString Nazwisko;
     //Nazwisko=ui->lineNazwisko->text();

    QString ID;
    ID=ui->leEdytujKlienta->text();

      QSqlQuery updateQuery = QSqlQuery(db);
      updateQuery.prepare("UPDATE tKlient SET NAZWISKO = :newNAZWISKO WHERE ID = :id ");
      updateQuery.bindValue(":newNAZWISKO", Nazwisko);
      updateQuery.bindValue(":id", ID);
      updateQuery.exec();

       queryModelKlienci = new QSqlQueryModel(this); // tworzę obiekt modelu
       queryModelKlienci->setQuery("SELECT * FROM [Projekt1].[dbo].[tKlient]"); // dodaję zapytanie
       ui->tableKlienci->setModel(queryModelKlienci); // podpinam model pod kontrolkę typu QTableView

}

W MainWindow w pobieram numer ID rekordu, który chcę udytować. Potem chcę, aby wyskoczyło okienko z uzupełnionymi starymi danymi, następnie edytować np. NAZWISKO i zapisać.

KOMUNIKACJA MIEDZY SLOTAMI:

#include "ui_edytujklienta.h"
#include <QtSql>
#include "mainwindow.h"

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


}

edytujklienta::~edytujklienta()
{

    delete ui;
}

void edytujklienta::onNewTextEntered(const QString &text)
{
    qDebug() << "ODEBRANO numer ID: " << text ;


     ui->lNumerKlienta->setText("text");

}

void edytujklienta::on_leImie_returnPressed()
{

}

void edytujklienta::on_lineNazwisko_returnPressed()
{

}

void edytujklienta::on_lineUlica_returnPressed()
{

}

void edytujklienta::on_lineNrDomu_returnPressed()
{

}

void edytujklienta::on_lineNrMieszkania_returnPressed()
{

}

void edytujklienta::on_linePESEL_returnPressed()
{

}

void edytujklienta::on_lineAdresMailowy_returnPressed()
{

}

void edytujklienta::on_lineKodPocztowy_returnPressed()
{

}

void edytujklienta::on_lineMiejscowosc_returnPressed()
{

}

void edytujklienta::on_pbZatwierdz_clicked()
{


    QString Nazwisko,Imie, Ulica, NrDomu, NrMieszkania, PESEL,AdresMiasto, AdresEmail, KodPocztowy, Miejscowosc;
    Nazwisko=ui->lineNazwisko->text();
    Imie=ui->leImie->text();
    Ulica=ui->lineUlica->text();
    NrDomu=ui->lineNrDomu->text();
    NrMieszkania=ui->lineNrMieszkania->text();
    PESEL=ui->linePESEL->text();
    AdresMiasto = ui->lineMiejscowosc->text();
    AdresEmail = ui->lineAdresMailowy->text();
    KodPocztowy = ui->lineKodPocztowy->text();
    Miejscowosc =ui->lineMiejscowosc->text();


    QSqlQuery updateQuery ;
    updateQuery.prepare("UPDATE tKlient SET NAZWISKO = :newNAZWISKO, IMIE = :newIMIE, PESEL = :newPESEL, ADRES_MIASTO = :newADRES_MIASTO, ADRES_EMAIL = :newADRES_EMAIL, ADRES_KOD_POCZTOWY =  :newADRES_KOD_POCZTOWY, ADRES_ULICA = :newADRES_ULICA, ADRES_NR_BUDYNKU = :newADRES_NR_BUDYNKU WHERE ID = :id ");
    updateQuery.bindValue(":newIMIE",Imie);
    updateQuery.bindValue(":newNAZWISKO", Nazwisko);
    updateQuery.bindValue(":newPESEL",PESEL);
    updateQuery.bindValue(":newADRES_MIASTO",AdresMiasto);
    updateQuery.bindValue(":newADRES_EMAIL",AdresMiasto);
    updateQuery.bindValue(":newADRES_KOD_POCZTOWY",KodPocztowy);
    updateQuery.bindValue(":newADRES_ULICA",Ulica);
    updateQuery.bindValue(":newADRES_NR_BUDYNKU", NrMieszkania);
    updateQuery.exec();

    if(updateQuery.exec()){
        qDebug()<< "Record zaktualizowany";


    }else
    {
        qDebug() << "Error: brak aktualizacji";
    }

}

void edytujklienta::on_pbAnuluj_clicked()
{

}

void edytujklienta::on_pbZatwierdz_clicked() potrzebuje ID czyli zmienna text z void edytujklienta::onNewTextEntered(const QString &text).

0

czekaj stój nie zrozumiałem do końca. Mam dane z bazy. Mam tabele, klikam. Wyskakują mi dane i mogę je sobie edytować? Musisz mieć po prostu dostęp do modelu. Pobierasz sobie dane z niego. Ładujesz do jakiś qlineedit itp. MAsz przycisk zapisz. Pobierasz dane wpisane w Pola i wrzucasz do modelu.

1

W Qt prawidłowa komunikacja między klasami odbywa się przez sygnały i sloty. KROPKA!
Każde friend oznacza dodanie silnej zależności między klasami, a to zawsze jest źle, szczególnie jeśli jest to zależność cykliczna.

1

Eee zaraz tam sygnały i sloty....
W tym wypadku @supermario wystarczy,abyś konstruktor dialogu edytującego wpis zdefiniował sobie tak:

EdytujKlienta(int ID, const QWidget *parent = 0, <tutaj te wszystkie widget flags i window flags>) : public QDialog

i teraz w MainWindow kiedy tworzysz sobie instancję EdytujKlienta to konstruktor wywołujesz:

EdytujKlienta(queryModelKlienci->data(<QModelIndex pokazujący na daną ID>), this, <flagi>);
0

zobacz przykład Address Book

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