2017-05-13 4 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?"); 
} 

Warum qDebug in dieser Situation funktioniert gut, aber ui -> ... nicht? Wie man es repariert?Qt - Hauptfenster Klassenobjekt in einer anderen Klasse funktioniert nicht gut

EDIT: Lösung: `QPlainTextEdit * Zeiger; Mainwindow-Konstruktor { Zeiger = UI-> qPlainTextEdit;}

gibt einige andere Klasse Methode { Zeiger-> appendPlainText ("Es funktioniert"); } `

Antwort

0

Sie erstellen eine neue Instanz der MainWindow Klasse innerhalb MyAnotherClass::mySlot(). Wenn dieser Slot endet, wird diese Instanz gelöscht. Sie können also keine Änderungen sehen.

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

dieser Stattdessen sollten Sie Zeiger auf Ihre Hauptfenster haben irgendwo in Ihrem MyAnotherClass:

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

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

und dann können Sie somethins wie folgt tun:

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

Natürlich sollten Sie Initiiere diesen Zeiger irgendwie, bevor du ihn benutzen kannst.

+0

Wie initiiere ich diesen Zeiger? Kennst du einen guten Weg, dies zu tun? 'Klasse MyAnotherClass: public QPlainTextEdit { privat: MainWindow * _mainWindow; } ' –

+0

Es könnte verschiedene Wege geben, hängt von Ihrem Code-Design ab. Sie können es in den Konstruktor oder eine Methode übergeben. Oder Sie können 'MainWindow' zu einem Singleton machen. – Evgeny

+0

[Hauptfenster.cpp] (https://codepaste.net/ebe9mm) [Hauptfenster.h] (https://codepaste.net/g3nf65) [myqplatintextedit.h] (https://codepaste.net/ba8kjc) Meine andere Klasse ist ** MyQPlaintTextEdit ** und Code finden Sie in ** mainwindow.cpp ** in ** exit_slot() ** und ** on_pushButton_clicked() **; Können Sie mir sagen, wie ich diesen Zeiger in meinem Fall verwenden kann? –

Verwandte Themen