Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. PROBLEM: Wykorzystanie zmiennej(QStringa) z jednej klasy w drugiej
Qt 6.12 LTS 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
    #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
                      • Unsolved