Qt : 다른 창에서 공용 개체에 액세스

EVARATE

이 프로그램은 메인 창에서 mBulbPrimary클래스 의 객체를 생성하고 그 객체 pointCloudBool내용을 변경하는 계산을 수행합니다. actionSave_Mandelbulb위젯을 클릭하면 새 창이 DialogSaveMB나타나고 사용자는 파일 경로를 입력하고 pushButton_save버튼을 클릭 할 수 있습니다 . 이것은 mBulbPrimary.savePrimary(filePath)원래 객체 기능 을 호출하는 것으로되어 있습니다.

그러나 dialogsavemb.cpp 에서 mBulbPrimary 개체는 인식되지 않으며 이유를 이해할 수 없습니다. 객체는 public이고 mainwindow.hdialogsavemb.cpp에 포함되어 있는데 왜 객체 나 메서드 / 함수에 액세스 할 수 없습니까?

mainwindow.h :

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialogsavemb.h"
#include "pointcloudbool.h"


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class DialogSaveMB;
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    DialogSaveMB dialogSaveMB;  //Dialog window

    pointCloudBool mBulbPrimary;  //public mBulbPrimary object
private:
    Ui::MainWindow *ui;


private slots:
    //unrelated functions...

    void openSaveMBulbWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp :

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>

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

    //unrelated connections...

    connect(ui->actionSave_Mandelbulb, SIGNAL(triggered(bool)),
            this, SLOT(openSaveMBulbWindow()));

}

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

//Implementation:

//unrelated functions...

void MainWindow::openSaveMBulbWindow(){
    dialogSaveMB.show();

}

dialogsavemb.h :

#ifndef DIALOGSAVEMB_H
#define DIALOGSAVEMB_H

#include <QDialog>

namespace Ui {
class DialogSaveMB;
}

class DialogSaveMB : public QDialog
{
    Q_OBJECT

public:
    explicit DialogSaveMB(QWidget *parent = nullptr);
    ~DialogSaveMB();

private:
    Ui::DialogSaveMB *ui;

private slots:
    void saveMBulb(std::string filePath);
};

#endif // DIALOGSAVEMB_H

dialogsavemb.cpp :

#include "dialogsavemb.h"
#include "ui_dialogsavemb.h"
#include "mainwindow.h"

DialogSaveMB::DialogSaveMB(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogSaveMB)
{
    ui->setupUi(this);
    ui->radioButton_txt->setChecked(true);

    //Get filepath from a lineEdit widget of the dialog:
    std::string filePath = ui->lineEdit_filePath->text().toUtf8().constData();

    //unrelated connections...

    connect(ui->pushButton_save, SIGNAL(clicked(bool)),
            this, SLOT(saveMBulb(filePath)));

}

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

void DialogSaveMB::saveMBulb(std::string filePath){
    mBulbPrimary.savePrimary(filePath);
    //The above line needs to access the 'mBulbPrimary' object in the MainWindow class
    //but it can't.
}
맥심 페이퍼 노

이것은 아마도 @hyde가 주석에서 설명하는 것입니다.

mainwindow.h에 다음을 추가하십시오.

private slots:
  void saveMBulb(const QString &filePath);

mainwindow.cpp MainWindow생성자에서 다음을 추가하십시오.

  connect(&dialogSaveMB, &DialogSaveMB::mBulbPathChanged, this, &MainWindow::saveMBulb);

mainwindow.cpp에서 다음을 추가하십시오.

void MainWindow::saveMBulb(const QString &filePath)
{
  // you could add some checks here, eg. !filePath.isEmpty() or QFileInfo(filePath).exists()
  mBulbPrimary.savePrimary(filePath.toStdString());
}

dialogsavemb.h에서 다음을 추가하십시오.

signals:
  void mBulbPathChanged(const QString &filePath) const;

dialogsavemb.cpp DialogSaveMB생성자에서 다음을 변경하십시오.

  //connect(ui->pushButton_save, SIGNAL(clicked(bool)), this, SLOT(saveMBulb(filePath)));

  connect(ui->pushButton_save, &QPushButton::clicked, this, [this]() {
    emit mBulbPathChanged(ui->lineEdit_filePath->text());
  });

당신은 할 수 없습니다 포함 할 필요가 minwindow.hDialogSaveMB코드입니다. 어쨌든 이것은 순환 종속성을 생성하기 때문에 좋지 않습니다 (MainWindow에는 대화 상자 헤더가 필요하고 대화 상자에는 MainWindow 헤더가 필요합니다-이상적이지 않음).

그리고 mBulbPrimary공개 할 필요가 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 클래스의 공용 메서드에 액세스

분류에서Dev

서비스 제공 업체의 다른 DB에 액세스

분류에서Dev

Drupal에서 다른 개체 내의 개체에 액세스

분류에서Dev

Javascript는 다른 공용 메서드 (동일한 개체) 내부에서 공용 메서드에 액세스합니다.

분류에서Dev

다른 사용자 이름으로 Windows 공유에 액세스

분류에서Dev

다른 개체에있는 개체의 속성에 액세스

분류에서Dev

다른 codeigniter에서 한 클래스의 개체에 액세스

분류에서Dev

다른 클래스에서 생성 된 개체에 액세스

분류에서Dev

다른 스크립트에서 개체 속성에 액세스

분류에서Dev

C ++에서 다른 두 개의 다른 공유 객체가 세 번째 공유 객체의 Singleton에 액세스 할 수 있습니까?

분류에서Dev

다른 JSON 개체 내부의 JSON 개체에 액세스

분류에서Dev

다른 개체 내부의 개체 속성에 액세스

분류에서Dev

다른 개체의 개체에 액세스

분류에서Dev

다른 클래스에서 창에 액세스

분류에서Dev

람다에 비공개로 액세스

분류에서Dev

공용체 유형 (TypeScript)에서 매개 변수에 액세스 할 수 없습니다.

분류에서Dev

다른 클래스에서 내 사용자 정의보기 개체에 액세스 할 수 없음

분류에서Dev

다른 함수에서 개체의 변수에 액세스

분류에서Dev

다른 함수에서 개체 속성에 액세스

분류에서Dev

C ++ 다른 파일에서 주 개체에 액세스

분류에서Dev

C # 창 창에서 개체를 전달한 후 개체 속성에 액세스 할 수 없습니다.

분류에서Dev

Windows CE에서 공유 / 다른 컴퓨터에 액세스

분류에서Dev

개체는 공용으로 정의 된 메서드에 액세스 할 수 없습니다.

분류에서Dev

2 개의 다른 도메인에서 네트워크 공유에 액세스

분류에서Dev

다른 개체의 foreach 함수에서 개체의 "this"에 액세스합니까?

분류에서Dev

또 다른 객체를 통해 개체에 액세스

분류에서Dev

Selenium VBA 사용 : 다른 앱에서 연 Chrome 창에 액세스하는 방법은 무엇입니까?

분류에서Dev

iText를 사용하여 다른 브라우저 탭 또는 창에서 PDF 책갈피에 액세스

분류에서Dev

Unity의 다른 네임 스페이스에서 공용 메서드에 액세스

Related 관련 기사

  1. 1

    다른 클래스의 공용 메서드에 액세스

  2. 2

    서비스 제공 업체의 다른 DB에 액세스

  3. 3

    Drupal에서 다른 개체 내의 개체에 액세스

  4. 4

    Javascript는 다른 공용 메서드 (동일한 개체) 내부에서 공용 메서드에 액세스합니다.

  5. 5

    다른 사용자 이름으로 Windows 공유에 액세스

  6. 6

    다른 개체에있는 개체의 속성에 액세스

  7. 7

    다른 codeigniter에서 한 클래스의 개체에 액세스

  8. 8

    다른 클래스에서 생성 된 개체에 액세스

  9. 9

    다른 스크립트에서 개체 속성에 액세스

  10. 10

    C ++에서 다른 두 개의 다른 공유 객체가 세 번째 공유 객체의 Singleton에 액세스 할 수 있습니까?

  11. 11

    다른 JSON 개체 내부의 JSON 개체에 액세스

  12. 12

    다른 개체 내부의 개체 속성에 액세스

  13. 13

    다른 개체의 개체에 액세스

  14. 14

    다른 클래스에서 창에 액세스

  15. 15

    람다에 비공개로 액세스

  16. 16

    공용체 유형 (TypeScript)에서 매개 변수에 액세스 할 수 없습니다.

  17. 17

    다른 클래스에서 내 사용자 정의보기 개체에 액세스 할 수 없음

  18. 18

    다른 함수에서 개체의 변수에 액세스

  19. 19

    다른 함수에서 개체 속성에 액세스

  20. 20

    C ++ 다른 파일에서 주 개체에 액세스

  21. 21

    C # 창 창에서 개체를 전달한 후 개체 속성에 액세스 할 수 없습니다.

  22. 22

    Windows CE에서 공유 / 다른 컴퓨터에 액세스

  23. 23

    개체는 공용으로 정의 된 메서드에 액세스 할 수 없습니다.

  24. 24

    2 개의 다른 도메인에서 네트워크 공유에 액세스

  25. 25

    다른 개체의 foreach 함수에서 개체의 "this"에 액세스합니까?

  26. 26

    또 다른 객체를 통해 개체에 액세스

  27. 27

    Selenium VBA 사용 : 다른 앱에서 연 Chrome 창에 액세스하는 방법은 무엇입니까?

  28. 28

    iText를 사용하여 다른 브라우저 탭 또는 창에서 PDF 책갈피에 액세스

  29. 29

    Unity의 다른 네임 스페이스에서 공용 메서드에 액세스

뜨겁다태그

보관