kann aus thread in label schreiben aber nicht in TextBox

Alles rund um die Programmierung mit Qt
Antworten
bey0nd
Beiträge: 4
Registriert: 22. April 2010 13:25

kann aus thread in label schreiben aber nicht in TextBox

Beitrag 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
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag 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.
bey0nd
Beiträge: 4
Registriert: 22. April 2010 13:25

Beitrag 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...
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag 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.
Antworten