Seite 1 von 1

kann aus thread in label schreiben aber nicht in TextBox

Verfasst: 23. April 2010 15:11
von bey0nd
Hallo,

habe eine Hauptklasse "Eigenspannungmessung"

im Konstruktor starte ich eine Klasse names koordinaten_auslesen


Code: Alles auswählen

...

Eigenspannungmessung::Eigenspannungmessung(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Eigenspannungmessung)
{
    ui->setupUi(this);

    gcode2c = new gcode2controller(this);

    koordinaten_auslesen *ko_aus = new koordinaten_auslesen(this,gcode2c);
    ko_aus->start();
}

...
void Eigenspannungmessung::anzeigen(){
    ui->lineEdit->setText("mmm");
    ui->textEdit_2->append("asdfasdf");
}
...



Die Klasse koordinaten_auslesen

Code: Alles auswählen

...


gcode2controller *gcode;

koordinaten_auslesen::koordinaten_auslesen(Eigenspannungmessung *peigen,gcode2controller *param_gcode)
{
    eigen = peigen;
    Sleeptime = 1000;
    gcode= param_gcode;
    eigen->anzeigen();

}

void koordinaten_auslesen::run(){
    double *ausgabe = new double[3];

    while(true){
        eigen->anzeigen();
        ausgabe = gcode->getmmPos();
        eigen->akt_koordinaten_anzeigen(ausgabe[0],ausgabe[1],ausgabe[2]);
        Sleep(Sleeptime);
    }

}


Rufe ich eigen->auslesen(), aus dem Konstruktor der Klasse koordinaten_auslesen. oder aus der Klasse Eigenspannungmessung auf wir der Text ins lineEdit und ins textEdit übernommen.

rufe ich auslesen auf der run() merthode auf genauso.

allerdings wenn ich eigen->anzeigen() aus der while(true) endlosschleife aufrufe funktioniert nur die Textübername des lineEdits. Beim versuch es ins textEdit zu übernehmen bricht das Programm ab und ich bekomm nen Runtime Error! von der M$ Visual C++ Runtime Library.

hab auch schon mit setText oder setPlainText oder append Probiert. gleiches Ergebnis...


Danke für eure Hilfe

Verfasst: 23. April 2010 15:20
von Curtis Newton
Auf GUI-Elemente darf nur aus dem Hauptthread zugegriffen werden. Sende vom Workerthread Signale, die den Hauptthread zu bestimmten Aktionen veranlassen.

C.

Verfasst: 23. April 2010 16:43
von bey0nd
ja hab ich ja. nur aus der klasse eigenspannung (die hauptklasse) greife ich auf gui elemente zu. im thread rufe ich nur functionen aus der eingenspannungsklasse auf, die dann auf die gui zugreifen...

Verfasst: 23. April 2010 16:58
von pfid
bey0nd hat geschrieben:ja hab ich ja. nur aus der klasse eigenspannung (die hauptklasse) greife ich auf gui elemente zu. im thread rufe ich nur functionen aus der eingenspannungsklasse auf, die dann auf die gui zugreifen...
Wenn du im Thread *irgendeine Methode* (egal von welcher Klasse) aufrufst, wird diese im Thread-Kontext ausgeführt.
Wenn du in deinem Thread willst, dass dein GUI-Thread irgendwas tut, musst du das über Signals & Slots machen.