QTを使用して定期的なコールバックを作成しようとしています。私は、OpenGLの定期的なコールバックのようなものを考えています。
基本的に、私はイベントが発生するのを待っているマイクロコントローラーを持っています。イベントが発生すると、シリアルポートを介してPCに時刻が送信されます。PC側では、この時間情報を受信するたびにGUIを更新するか、Rxバッファーに何かがあるかどうかを定期的に確認する必要があります。
QTを使用して定期的なコールバックを作成しようとしています。私は、OpenGLの定期的なコールバックのようなものを考えています。
基本的に、私はイベントが発生するのを待っているマイクロコントローラーを持っています。イベントが発生すると、シリアルポートを介してPCに時刻が送信されます。PC側では、この時間情報を受信するたびにGUIを更新するか、Rxバッファーに何かがあるかどうかを定期的に確認する必要があります。
QSocketNotifier を使用してみてください。
標準入力の読み取りと処理に使用しました。読み込んだファイルを変更するだけです(私の場合はSTDIN_FILENO)
---hpp
class QSocketNotifier;
class ConsoleReader : public QObject
{
Q_OBJECT
public:
explicit ConsoleReader(QObject *parent = 0);
Q_SIGNALS:
void textReceived(QString message);
public Q_SLOTS:
void text();
private:
QSocketNotifier* notifier;
};
---cpp
#include <QSocketNotifier>
#include <unistd.h> //Provides STDIN_FILENO
ConsoleReader::ConsoleReader(QObject *parent)
: QObject(parent)
{
notifier = new QSocketNotifier(STDIN_FILENO, QSocketNotifier::Read);
connect(notifier, SIGNAL(activated(int)), this, SLOT(text()));
}
void ConsoleReader::text()
{
QTextStream qin(stdin);
QString line = qin.readLine();
Q_EMIT textReceived(line);
}
私の特定のニーズのために、QextSerialPortを使用することになりました。
メッセージが受信されるたびにモデルに時間が追加され、GUI が更新されるように、信号をポートに接続しました。
Port = new QextSerialPort();
//... various Port Setup
connect(Port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
このようにして、データ モデルと GUI をより分離しておくことができました。