2017-05-13 68 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 *指針; 主窗口構造{ 指針= 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 **中找到的代碼。你能告訴我如何在我的情況下使用該指針? –