0


QTを使用して定期的なコールバックを作成しようとしています。私は、OpenGLの定期的なコールバックのようなものを考えています。

基本的に、私はイベントが発生するのを待っているマイクロコントローラーを持っています。イベントが発生すると、シリアルポートを介してPCに時刻が送信されます。PC側では、この時間情報を受信するたびにGUIを更新するか、Rxバッファーに何かがあるかどうかを定期的に確認する必要があります。

  • 定期的にメットフッドを呼び出すためのQtの組み込み機能はありますか?
  • そうでない場合は、QextSerialとGUIの間でシグナルを作成する方法はありますか?
  • または、serialPortとGUIの間にオブザーバー/監視可能な関係を持つマルチスレッドアプリを作成する必要がありますか?
  • 4

    3 に答える 3

    3

    QTimerを見てください。また、アナログ時計の例も示しています

    于 2012-11-17T17:35:46.230 に答える
    1

    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);
    }
    
    于 2012-11-19T13:28:46.917 に答える
    1

    私の特定のニーズのために、QextSerialPortを使用することになりました。

    メッセージが受信されるたびにモデルに時間が追加され、GUI が更新されるように、信号をポートに接続しました。

    Port = new QextSerialPort();
    //... various Port Setup
    connect(Port, SIGNAL(readyRead()),      this, SLOT(onReadyRead()));
    

    このようにして、データ モデルと GUI をより分離しておくことができました。

    于 2012-11-17T20:34:13.487 に答える