Dostęp do danej zmiennej z innej formy.

0

Witam,

Mam dwie klasy - okna.
Te klasy posiadają zmienne, okno1 będzie rodzicem, okno2 dzieckiem.

Chcę zmodyfikować zmienną publiczną z okna1, za pomocą działań na oknie2.

Czyli w skrócie przekazać zmienną z okna2 do okna1.

Jeżeli coś to zmieniam korzystam z QT.

0

możliwości ci od groma...
1.Przekazać wskaźnik na zmienną w konstruktorze okna2 (tak chyba najsensowniej,jeśli zmienna jest dostępna od razu)
2.Użyć sygnału i slotu do przekazania (tak jeśli owa zmienna może zostać zmodyfikowana nie wiadomo kiedy)

0

Kombinowałem z pierwszym sposobem (wydawał mi się rozsądniejszy)

fragment pliku nagłówkowego okna1 (tutaj MainWindow.h)

 
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int *wsk; // To wskaźnik na zmienną niżej
    int wybrany;

private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *m_manager;
    QList<QString> linki;
    QList<QString> listaUtworow;
    bool zajety;
    int liczbaPodStron;
    int iteracja;
    QString box;
    QString wykonawca;
    QString tytul;
    QString urlBud;
    QString strona;
    void pobierzStrone();
    void szukajPiosenek();

private slots:
    void sprawdz();
    void pobranoStrone(QNetworkReply*);
};

Ustawianie wskaźnika na zmieną w kodzie źródłowym okna1 (tutaj MainWindow.cpp)

 
        wsk = &wybrany;
        Dialog *myNewDialog = new Dialog(listaUtworow, linki, wsk, this);
        myNewDialog->show();

Plik nagłówkowy okna2 (tutaj dialog.h)

 
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QList<QString>, QList<QString>, int *, QWidget *parent);
    int *wybrany;
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;
    QList<QString> linki;
    QList<QString> listaUtworow;
private slots:
    void wybral();
};

Kod źródłowy gdzie próbuję przekazać z okna2 do okna1 (tutaj dialog.cpp)

 
void Dialog::wybral()
{
    *wybrany = ui->listWidget->currentRow();
    this->close();
}

Wszystko się kompiluje ładnie, ale wartość zmiennej w okno1 wynosi dalej zero, nie używałem wcześniej wskaźników (mój błąd) bo programowałem w C# i winforms, stwierdziłem że szybkość działania i multiplatformowość jest ważniejsza więc teraz jadę w QT + C++.

Pozdrawiam i dziękuję za pomoc.

0

Hmmm weź Bracie opisz słowami,co Ty chciałbyś uzyskać?Żeby dialog po akceptacji coś ustawił?

0

Tak, dialog (okno2) po akceptacji przesyła do zmiennej wybrany (okno1), numer (indeks) zaznaczonego wiersza w QListWidget.

1

To zakładając,że masz zrobioną jakąś formę w QDesigerze do dialogu(ale i bez tego zadziała) w mainwindow robisz tak:

yourDialog *dialog=new yourDialog(this);//masz więcej parametrów,ale nie chciało mi się wszystkiego wypisywać
dialog->setAttribute(Qt::WA_DeleteOnClose);
if(dialog->exec()==QDialog::Accepted)//Tak się winno używać dialogu modalnego.Show powoduje niemodalność
{
   znalezionyIndex=dialog->ui->listWidget->selectionModel()->selectedIndexes.at(0);//to ui to zakładam użycie designera.Jeśli masz ów QListWidget jako składnik klasy dialogu to będzie po prostu dialog->listWidget
}

powyższy kod zakłada,że masz odpowiednio popodłączane w designerze accept i reject

0

Dzięki, pomogło. ;)

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