2017-05-13 10 views
0
void MyAnotherClass::mySlot(){ 
MainWindow window; 
window.myFunction();} 

void MainWindow::myFunction(){ 

qDebug() << "THIS qDebug works well but ui do NOT"; 

ui->textEdit->setText("Why i do not working?"); 
} 

qDebug가 정상적으로 작동하지만 왜 ui -> ...가 좋지 않은 이유는 무엇입니까? 그것을 고치는 방법?Qt - 다른 클래스의 mainwindow 클래스 객체가 제대로 작동하지 않습니다.

편집 : 솔루션 : `QPlainTextEdit * pointer; MainWindow를 생성자 { 포인터 = UI-> qPlainTextEdit;}

또 다른의 클래스 메소드 { 포인터 타입> appendPlainText ("그것은 작동") 일부; }

답변

0

MyAnotherClass::mySlot() 안에 MainWindow 클래스의 새 인스턴스를 만듭니다. 이 슬롯이 끝나면이 인스턴스가 삭제됩니다. 따라서 어떤 변화도 볼 수 없습니다.

void MyAnotherClass::mySlot() { 
    MainWindow window; //new instance created 
    window.myFunction(); 
} //here this instance deleted 

대신이의 당신은 당신의 MyAnotherClass 내부 어딘가에 기본 창으로 포인터가 있어야합니다

MyAnotherClass 
{ 
    ....... 
    private slots: 
     void mySlot(); 

    private: 
     MainWindow* _mainWindow; 
     ............... 
}; 

다음은이 같은 somethins 수행 할 수 있습니다 물론

void MyAnotherClass::mySlot() { 
    _mainWindow->myFunction(); 
} 

당신이해야을 어떻게 든이 포인터를 사용하기 전에 초기화하십시오.

+0

이 포인터를 초기화하는 방법은 무엇입니까? 이 일을하는 좋은 방법을 알고 있습니까? 'class MyAnotherClass : public QPlainTextEdit { private : MainWindow * _mainWindow; }' –

+0

코드 디자인에 따라 여러 가지 방법이있을 수 있습니다. 생성자 또는 일부 메서드에 전달할 수 있습니다. 아니면'MainWindow'를 싱글 톤으로 만들 수 있습니다. – Evgeny

+0

[mainwindow.cpp] (https://codepaste.net/ebe9mm) [mainwindow.h] (https://codepaste.net/g3nf65) [myqplaintextedit.h] (https://codepaste.net/ba8kjc) 내 다른 클래스는 ** MyQPlaintTextEdit **이며 ** exit_slot() ** 및 ** on_pushButton_clicked() **에서 ** mainwindow.cpp **에서 찾을 수있는 코드입니다. 제 경우에 포인터를 어떻게 사용할 수 있습니까? –