Qt i przekazywanie wartości na nowy form

0

Witam!

Czy ktoś z was wie jaka może być przyczyna pustych wartości, które są uprzenio przekazywane i uzupełniane na formatce głównej na nową formatke. Mam kilka zmiennych które uzupełniane są na formatce głównej, i po naciśnięciu na przycisk znajdujący się w formatce głównej te zmienne z uzupełnionymi wartościami mają być przekazane do wyświetlającej się nowej formatki. Zmienne doklaruje w pliku nagłówkowym aby były w tej samej przestrzeni nazw, na formatce głównej je zeruje w konstruktorze i uzupełniam w metodzie pod przyciskiem, w momencie wciskania przycisku uruchamiającego tą metodę sprawdzam czy zmienne te nie są zerowe, i tak owe na pewno zawierają jakieś wartości, tyle że na nowej formatce je widać po utworzeniu obiektu okna głównego, ale wartości są zerowe.

Konstruktor okna głównego, któy m.in. zeruje zmienne zadeklarowane w pliku .h

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

    a = "";
    b = "";
    c = "";
    d = "";
}

Funkcja która po wciśnięciu przycisku uzupełnia zmienne w oknie głównym

void MainWindow::on_pushButtonPrzegldajZdjecie1_clicked()
{
    a = "xxx";
    b = "yyy";
    c = "zzz";
    d = "abc";
} 

A tu kod formularza wywoływanego z okna głównego:

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

    MainWindow oknoGlowne;

    //w taki sposób realizuje dostęp do tych wartości tyle że w tym momencie są one już zerowe
    oknoGlowne.a;
    oknoGlowne.b;
    oknoGlowne.c;
    oknoGlowne.d;
} 

Chce tych wartości używac w widgetach na nowej formatce. Może powinienem inaczej realizować to przekazanie aby było "po bożemu"?

1

Podstawy!
W konstruktorze SummaryWindow tworzysz SummaryWindow jako zmienną lokalną, więc ten obiekt jest niszczony natychmiast po zakończeniu konstrukcji SummaryWindow.
Gdy konstrukcja SummaryWindow się zakończy to dopiero potem okno jest pokazywane! W tym momencie twoje oknoGlowne nie istnieje.


przypuszczalnie, gdzieś masz jeszcze jedną instancję `MainWindow` i po prostu powinieneś przekazać wskaźnik na to okno, albo wykonać połączenia między tymi oknami. Pamiętaj, że w Qt wiele rzeczy można o wiele lepiej zrobić, korzystając z sygnałów i slotów.
0

Zdążyłem już poznać sygnały i sloty w Qt, aczkolwiek było by to jedno, jedyne miejsce gdzie musiał bym z nich skorzystać i w sumie nie zagłębiałem się bardziej jak za ich pomocą przekazywać wartości do nowego formularza.

Jak rozumiem, z tego co piszesz w takim wypadku zostaje przekazać wartości tych zmiennych przez wskaźnik. Nie rozumiem tylko co miałeś na myśli mówiąc o przekazywaniu wartości "przez wskażnik do tego okna". Czy chodzi o wskaźnik stworzenie wskażnika do okna głównego w konstruktorze nowego okna. czy o wskaźnik do nowego okna gdzieś indziej?

Zmienne, które chce przekazywać są zadeklarowane jako publiczne w pliku nagłówkowym okna głównego, może być tu błąd? Kompilator nic nie zgłasza i program sie uruchamia a ja głupieje coraz bardziej :/

0

przerobiłeś to co napisałem. Ja napisałem: "powinieneś przekazać wskaźnik na to okno", a nie jak ty to określiłeś "przekazywaniu wartości przez wskażnik do tego okna". Ty rozumiesz wskaźnik na dane, a ja pisze wskaźnik na okno.

Zrób to jak należy to robić w Qt: stwórz sygnały: aChanged(const QString &a); bChanged(const QString &b); cChanged(const QString &c);, ... . Emituj je jak a,b,c,d się zmienia. Następnie wykonaj odpowiednie połączenie pomiędzy oknami.

0

ok, masz racje, postaram się tak zrobić (w oparciu o sloty i sygnały) a co do wskaźników to rzeczywiście ostatni mój post był niepotrzebny, bo wszystko co napisałeś jest jasne a ja to źle zinterpretowałem w pierwszej chwili (kilka dobrych godzin przed kompem dało się chyba we znaki :/)

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