2017-05-13 43 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; メインウィンドウコンストラクタ{ ポインタ= UI-> qPlainTextEdit;}

いくつかの他のクラスメソッド{ pointer-> 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 { プライベート: 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 **にあります。あなたは私のケースでどのようにポインタを使うことができますか教えていただけますか? –

関連する問題