Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. PROBLEM: Wykorzystanie zmiennej(QStringa) z jednej klasy w drugiej
Qt 6.11 is out! See what's new in the release blog

PROBLEM: Wykorzystanie zmiennej(QStringa) z jednej klasy w drugiej

Scheduled Pinned Locked Moved Polish
12 Posts 2 Posters 6.9k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Tak jak w temacie zmienna o która mi chodzi wygrubie w kodzie
    glowne.h:
    @public:
    explicit Glowne(QWidget *parent = 0);
    ~Glowne();
    QString dir;
    @
    Tworze QString dir jako publica
    glowne.cpp
    @
    void Glowne::on_pushButton_2_clicked()
    {
    dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
    "/home",
    QFileDialog::ShowDirsOnly
    | QFileDialog::DontResolveSymlinks);
    this->close();
    mainwindow2=new MainWindow2(this);
    mainwindow2->show();
    qDebug()<<"directory"<<dir<<endl;
    }@
    Jak naciskam przycisk wybieram lokalizacje i zapisuje do QString dir ta lokalizacje
    I teraz pojawia się problem otwieram nowe okno (klase) i w tym oknie chce wykorzystać zapisaną wcześniej lokalizacje QString dir ...
    Korzystam z przycisku by wyświetlić QString dir w nowej klasie czyt. oknie
    MainWindow2.cpp
    @void MainWindow2::on_pushButton_4_clicked()
    {
    Glowne g;
    qDebug()<<"directory"<<g.dir<<endl;
    }@
    I puste pole mi wyświetla ...
    Każda pomoc mile widziana POMOCY

    1 Reply Last reply
    0
    • T Offline
      T Offline
      turaz
      wrote on last edited by
      #2

      Jeżeli chcesz użyć pola z tej klasy to musisz mieć referencje, bądź wskaźnik do tej instancji klasy 'Glowne". Inną opcją jest Singleton.
      Lub też przekazanie między klasami wartości tego pola :)

      Jak możesz to pokaż w jaki sposób wywołujesz to drugie okno bo domniemam, że tworzysz je w pierwszym?

      1 Reply Last reply
      0
      • ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #3

        Glowne to okno w którym wybieram czy chce otworzyc MainWindow1 czy MainWindow2 przy otwieraniu okna wybieram katalog który zapisuje sie do QStringa
        Glowne.h
        @
        includy~~~

        namespace Ui {
        class Glowne;
        }

        class Glowne : public QMainWindow
        {
        Q_OBJECT

        public:
        explicit Glowne(QWidget *parent = 0);
        ~Glowne();
        QString dir;

        private slots:
        void on_pushButton_clicked();

        void on_pushButton_2_clicked();
        

        private:
        Ui::Glowne *ui;
        MainWindow2 *mainwindow2;
        MainWindow *mainwindow;
        };

        #endif // GLOWNE_H
        @
        Glowne.cpp
        @

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

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

        void Glowne::on_pushButton_clicked()
        {
        dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
        "/home",
        QFileDialog::ShowDirsOnly
        | QFileDialog::DontResolveSymlinks);
        qDebug()<<"directory"<<dir<<endl;
        this->close();
        mainwindow=new MainWindow(this);
        mainwindow->show();
        }
        // tablica asocjacyjna(dictionary) ewentualnie wektory
        void Glowne::on_pushButton_2_clicked()
        {
        dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
        "/home",
        QFileDialog::ShowDirsOnly
        | QFileDialog::DontResolveSymlinks);
        this->close();
        mainwindow2=new MainWindow2(this);
        mainwindow2->show();
        qDebug()<<"directory"<<dir<<endl;
        }
        @

        Jestem laikem więc prośba czy mogłbyś mi napisać mniejwiecej gotowy albo przynajmniej przykład(na którym mogłbym sie wzorowac) przekazywania miedzy klasami tych informacji ?

        1 Reply Last reply
        0
        • T Offline
          T Offline
          turaz
          wrote on last edited by
          #4

          najprostszym sposobem będzie utworzenie w każdej z klas MainWindow pola prywatnego QString (przetrzymującego wartość 'dir') i ustawienie go w momencie tworzenia np:
          @
          mainWindow = new MainWindow(this);
          mainWindow->set_dir(dir);
          mainWindow->show();@
          gdzie:
          @ void set_dir(const QString &dir) { _dir = dir; }@

          Innym z sposobem możesz na przykład przekazać tą wartość w konstruktorze:
          @
          MainWindow::MainWindow(const QString &dir, QWidget *parent) :
          QMainWindow(parent),
          ui(new Ui::MainWindow)
          {
          _dir = dir;
          }
          @
          wtedy inicjalizacja wyglądała by tak:
          @
          mainwindow=new MainWindow(dir, this);
          mainwindow->show();
          @

          Innym z sposobów jest przekazanie wskaźnika do klasy 'Glowne' lub referencji.

          Poczytaj troszkę o programowaniu obiektowym w C++. Myślę, że troszkę pomogłem, w razie problemów pytaj :)
          Pozdrawiam.

          1 Reply Last reply
          0
          • ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #5

            Tworze w kazdej klasie pole prywatne qstring dir;
            I robie tak dokladnie jak napisales tworze funkcje void set_dir w headerze glowne.h oraz w cpp
            I wyskakuja mi bledy ze _dir was not declared in this scope oraz
            Class mainwindow2 has no member named "set_dir" w linijcie
            mainwindow2->set_dir(dir);
            Wybacz ze tak pisze ale internet mi padl w akademiku i pisze z komorki ...
            Drugim sposobem tez probowalem ale jesCze wiecej bledow sie pokazuje, jak mozesz to pomoz :////

            1 Reply Last reply
            0
            • T Offline
              T Offline
              turaz
              wrote on last edited by
              #6

              Wyskakuje Ci, że zmienna '_dir' nie występuje bo sam napisałeś, że stworzyłeś pole prywatne "dir' :)
              Proszę, musi działać :) (oczywiście ten fragment)
              glowne.h
              @

              #include "mainwindow.h"
              #include <QMainWindow>

              namespace Ui {
              class Glowne;
              }

              class Glowne : public QMainWindow
              {
              Q_OBJECT

              public:
              explicit Glowne(QWidget *parent = 0);
              ~Glowne();

              private slots:
              void on_pushButton_clicked();

              private:
              Ui::Glowne *ui;
              MainWindow *window;
              };
              @

              glowne.cpp

              @
              #include "glowne.h"
              #include "ui_glowne.h"

              #include <QFileDialog>

              Glowne::Glowne(QWidget *parent) :
              QMainWindow(parent),
              ui(new Ui::Glowne)
              {
              ui->setupUi(this);
              window = NULL;
              }

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

              void Glowne::on_pushButton_clicked()
              {
              QString dir = QFileDialog::getExistingDirectory(this,
              tr("Open Directory"),
              "/home",
              QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
              if (dir.isEmpty()) {
              return;
              }
              this->close();
              window = new MainWindow(this);
              window->set_dir(dir);
              window->show();
              }
              @

              mainwindow.h

              @
              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H

              #include <QMainWindow>

              namespace Ui {
              class MainWindow;
              }

              class MainWindow : public QMainWindow
              {
              Q_OBJECT

              public:
              explicit MainWindow(QMainWindow *parent = 0);
              ~MainWindow();
              void set_dir(const QString &dir);
              private:
              Ui::MainWindow *ui;
              QString _dir;
              };

              #endif // MAINWINDOW_H
              @

              mainwindow.cpp
              @
              #include "mainwindow.h"
              #include "ui_mainwindow.h"

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

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

              void MainWindow::set_dir(const QString &dir)
              {
              _dir = dir;
              }
              @
              Kompiluje się i działa tak jak chciałeś.
              Ahh te studia :P

              1 Reply Last reply
              0
              • ? Offline
                ? Offline
                A Former User
                wrote on last edited by
                #7

                DZIAŁA teraz jeszcze pytanie mam przycisk w klasie window Twojej i chce by przyciskajac go wyswietlil mi w application output ten wlasnie qstring dir ??

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  turaz
                  wrote on last edited by
                  #8

                  Pod sygnał clicked() przycisku podepnij slot i w nim użyj klasy qDebug()

                  1 Reply Last reply
                  0
                  • ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #9

                    @void MainWindow2::on_pushButton_4_clicked()
                    {
                    qDebug()<<"directory"<<dir<<endl;
                    }@
                    "dir" was not declared in this scope
                    chce wykorzystać tego QString dir w różnych przyciskach w tym oknie MainWindow2

                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      turaz
                      wrote on last edited by
                      #10

                      Czytamy co za błąd nam sie pojawia:

                      bq.
                      “dir” was not declared in this scope

                      i na pierwszy rzut oka widać, że zadeklarowane pole to _dir a nie dir

                      1 Reply Last reply
                      0
                      • ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by
                        #11

                        Dzieki Wielkie !!!

                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          turaz
                          wrote on last edited by
                          #12

                          Jeśli udało się to oznacz temat jako zakończony dla przyszłych pokoleń.

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved