2011-02-26 8 views
1

는 임 경우 mainwindow.cpp에 그럼 난과에있는 모든 개체를 얻을 수 있습니다 :QT4 : 다른 클래스의 mainwidow에있는 객체에 액세스하는 방법?

다른 클래스 (myclass2.cpp이)가 어떤 경우
this->ui->textBox ... 

와 나는 텍스트 상자 중 하나의 값을 좀하고 싶습니다. 하지만 그들은 내 메인 윈도우에있다. 나는 이것을 사용할 수 없다 -> ui-> textBox

개체에 접근하는 방법은 무엇인가?

고맙습니다.

답변

4

일반적으로이 문제는 Qt에서만 발생하지 않습니다. 이 작업을 수행 할 수있는 몇 가지 방법이 있습니다

  1. 당신이 원하는 캡슐화 그 mainwindow의 메소드를 제공하고 myclass2에서 해당 전화. 몇 가지 이름을 나중에 쉽게 변경할 깨끗한 디자인, 높은 자기 문서화 :

    // In mainwindow.cpp: 
    QString mainwindow::valueOfTheTextEditYouAreInterestedIn() const 
    { 
        return ui->textBox->toPlainText(); 
    } 
    

    이 혜택을 많이 가지고있다. 이 작업을 수행하려면 myclass2 개체에 여전히 주 창에 대한 포인터가 필요합니다. 그러면 다음과 같이 호출합니다.

    // In myclass2.cpp: 
    { 
        // we're in some function of myclass2 
        QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn(); 
    
        // Use the value... 
    } 
    
  2. 텍스트 편집을위한 접근자를 제공합니다. 이것은 좋은 생각이 아닙니다. 왜냐하면 myclass2mainwindow이없는 텍스트 편집을 변경할 수 있기 때문입니다. 그러나, 그것은과 같습니다 myclass2이 읽을 수 있도록 상수 포인터를 반환하여

    QTextEdit *getTheInterestingTextEdit() 
    { 
        return ui->textBox; 
    } 
    

    이 더 수용 할 수 있지만 수정할 수 없습니다, 텍스트 편집의 값 :

    const QTextEdit *getTheInterestingTextEdit() const 
    { 
        return ui->textBox; 
    } 
    

    Qt는 같은 일을 할 수있는 또 다른 방법을 제공합니다,하지만 당신은 그것을 위해 자신 만의 방법을 쓸 필요가 없습니다 : mainwindow 메인 승리에 대한 포인터입니다

    // In myclass2.cpp: 
    QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox"); 
    

    을 dow 객체 인 myclass2은 어떻게 든 구해야하고, "textBox"은 Designer에서 흥미로운 텍스트 상자에 부여한 Qt 객체 이름입니다. 그리고 텍스트 편집 객체가 주 윈도우 객체의 자식 위젯 일 경우에만 작동합니다.이 경우 반드시 있어야합니다. 당신은 일반적 으로이 기술에 의존하는 경우 문제가 발생할 수 있습니다.

  3. 항상 myclass2 님의 친구를 mainwindow으로 만들 수 있습니다. 이것은 상당 부분 이 아니며이 아닌 일부 코드를 게시 할 것을 권장합니다. :-)

+0

Hej 감사합니다! :) – Revollt

관련 문제