Qt GUIアプリケーションには2つのスレッドがあります。GUIのテキスト表示
非GUIスレッドは、シリアルポート上のデータを非常に頻繁に受信します。このデータは、メインスレッドであるGUIに表示する必要があります。スクロールも実装する必要があります。
どうすれば実装できますか?どんなQtクラスを使うべきですか?
Qt GUIアプリケーションには2つのスレッドがあります。GUIのテキスト表示
非GUIスレッドは、シリアルポート上のデータを非常に頻繁に受信します。このデータは、メインスレッドであるGUIに表示する必要があります。スクロールも実装する必要があります。
どうすれば実装できますか?どんなQtクラスを使うべきですか?
QString変数を含むスレッドからシグナルを送信し、そのデータを受け取るラベルを含むウィジェットにスロットを作成する必要があります。
ドキュメント:ここhttp://doc.qt.io/qt-5.7/signalsandslots.html
は、あなたのニーズのための基本的なプロトタイプがあります:あなたのcustomthread.cppであなたのcustomthread.h
signals:
portRead(QString text);
で
を
void process() //Your process function
{
QString text = readFromSerialPort(); // Your function that reads the SP
emit portRead(text)
}
であなたのmainwindow.h
あなたは正確にあなたのシリアルポートのための別のスレッドを使用している理由を、あなたのコードの詳細情報を追加する必要があり、あなたのmainwindow.cppでslots:
void setLabelText(QString text);
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);
}
ありがとうございます@Florent Uguet。シリアルデータは頻繁に受信されるので、そこからのすべてのデータをメインウィンドウに表示する必要があり、これには「スクロール」も必要です。スクロールを実装するにはどうすればよいですか? – Aham
@Ahamそれは別の質問です。あなたはそれを別に質問しなければなりません。しかし、http://doc.qt.io/qt-5.7/qscrollarea.htmlを見てください。 –
?一般的なルールとして、GUIの更新はメインスレッドからのみ行う必要があります。単一のスレッド設計に切り替えるか、クロススレッドシグナルを使用してGUIを更新することができます。 [Qt Terminal Example](https://doc.qt.io/qt-5/qtserialport-terminal-example.html)をご覧ください。 – Mike