2016-12-15 3 views
0

In meiner Qt GUI-Anwendung gibt es 2 Threads.Textanzeige auf der GUI

Der Thread ohne GUI empfängt sehr häufig Daten auf einer seriellen Schnittstelle. Diese Daten müssen auf der GUI angezeigt werden, die der Hauptthread ist. Scrollen muss ebenfalls implementiert werden.

Wie implementiere ich das? Welche Qt-Klassen sollten verwendet werden?

+1

Sie benötigen mehr Informationen zu Ihrem Code hinzuzufügen, warum genau für Ihre serielle Schnittstelle einen separaten Thread mit? In der Regel sollte das Aktualisieren der GUI nur vom Hauptthread aus erfolgen. Sie können möglicherweise zu einem Entwurf mit einem einzelnen Thread wechseln oder Cross-Thread-Signale verwenden, um die GUI zu aktualisieren. Vielleicht möchten Sie sich das [Qt Terminal Example] (https://doc.qt.io/qt-5/qtserialport-terminal-example.html) ansehen. – Mike

Antwort

0

Sie müssen ein Signal vom Thread senden, der die QString-Variable enthält, und einen Slot im Widget mit der Bezeichnung erstellen, um diese Daten zu erhalten.

Dokumentation: http://doc.qt.io/qt-5.7/signalsandslots.html

Hier können Sie für Ihre Bedürfnisse ein Grund Prototyp haben:

In Ihrem customthread.h

signals: 
    portRead(QString text); 

In Ihrem customthread.cpp

void process() //Your process function 
{ 
    QString text = readFromSerialPort(); // Your function that reads the SP 

    emit portRead(text) 
} 

In Ihr Hauptfenster.h

slots: 
    void setLabelText(QString text); 

In Ihrem mainwindow.cpp

Widget::Widget(QWidget *parent) 
{ 
    CustomThread *thread = new CustomThread(); 
    //Some code 

    connect(thread,SIGNAL(portRead(QString)),this,SLOT(setLabelText(QString))); 
} 

void setLabelText(QString text) 
{ 
    this->label->setText(text); 
} 
+0

Danke @Florent Uguet. Da die seriellen Daten häufig empfangen werden, müssen alle Daten von dort im Hauptfenster angezeigt werden, und dies erfordert ebenfalls "Scrollen". Wie kann ich Scrollen implementieren? – Aham

+0

@Aham Das ist eine andere Frage, Sie müssen es separat fragen. Aber werfen Sie einen Blick auf http://doc.qt.io/qt-5.7/qscrollarea.html –

Verwandte Themen