Anzeige:
Ergebnis 1 bis 4 von 4

Thema: QThreads

  1. #1
    digi
    Gast

    QThreads

    Hallo
    Ich habe mit der KDevelop eine einfache Anwendung erstellt.
    Und wenn ich auf einen Button klicke soll im QThread eine etwas
    längere Berechnung erfolgen.Das ergebnis möchte ich unter dem Button
    im QLabel "zahl" darstellen,das Programm lässt sich übersetzen wenn ich
    dies "zahl->setNum(total);" ausklammere.Hat jemand eine Idee wie ich
    die QLabel "zahl" zugreifen kann.

    Danke


    class MyThread : public QThread {
    public:
    MyThread( std::string a = "MyThread" );
    virtual void run();
    private:

    std::string name;
    };

    MyThread::MyThread( std::string a ) : name(a)
    {}

    void MyThread::run()
    {
    int total=0;
    //Hier ist eine längere Berechnung
    //die ich rausgenommen habe

    //dies funktioniert nicht
    zahl->setNum(total);
    }

    void StreamWidget::total_clicked()
    {
    MyThread total("total");
    total.start();
    }

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Hallo,

    wie du richtig erkannt hast kann man aus einem Thread nicht einfach so auf Objekte eines anderen Threads zugreifen.

    Verwendest du Qt4? Dann lässt sich das eventuell ziemlich simpel lösen - Qt4 erlaubt nämlich auch Signal/Slot Verbindungen über Threadgrenzen hinweg, zumindest laut doku.

    Bei Qt3 musst du das irgendwie sonst machen - ich glaube mich zu erinnern dass das im C++ Programming with Qt3 Buch beschrieben war.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Nur der Eventloop Thread, also der Haupthread der Applikation darf auf Elemente der GUI zugreifen (Widgets), bzw damit verwande Objekte (zB QPixmap)

    Es gibt grundsätzlich zwei Möglichkeiten:
    1) der Haupthread sieht regelmäßig in einer gemeinsamen Datenstruktur nach, ob das Ergebnis da ist (simple, aber nicht sehr effizient)

    2) der Arbeitsthread sendet ein Event an ein Zielobjekt wenn er fertig ist, siehe QApplication:ostEvent

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    digi
    Gast
    Danke euch,werde mir mal die Slot Programmierung anschauen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •