0

Qtを使用したシリアル通信に関するプロジェクトがあります。を使っているのでとても楽ですQSerialDevice。問題は、複数のフォームにアクセスすることQSerialDeviceです。

たとえば、2 つのフォームform1form2. (done)に表示される最後のハイパーターミナル経由でデータを送信しようとしましたが、form1に表示できませんform2。それだけでなく、 をやり遂げport->writeたいform2

私の質問はQSerialDevice2.0、複数の .cpp ファイルと複数のフォームで使用できますか?

4

2 に答える 2

2

QSerialDevice の代わりにより良い QtSerialPort を使用http://qt-project.org/wiki/QtSerialPort

于 2012-06-20T06:59:35.863 に答える
1

あなたが何をしようとしているのかを私が知ることができるのは、シリアルポートからデータを送信するために使用できる 2 つの異なる UI フォームがあることです。私は現在、プロジェクトのほぼ同じ問題に取り組んでおり、私が取り組んでいるのは、MVCスタイルのアーキテクチャを使用して問題を解決することです。

表示されるフォームを認識し、QSerialDevice にアクセスできるコントローラーを用意します。フォームはvoid write(QByteArray)、ポートへの書き込みを担当するコントローラーのスロットに接続される信号を送信できます。

class Form1 : QWidget {
public:
  Form1();
  ~Form1();
  //some form1 stuff.
signals:
  void writeToPort(QByteArray);
}
class Form2 : QWidget {
public:
  Form2();
  ~Form2();
  //Do some form2 stuff
signals:
  void writeToPort(QByteArray);
}


class Controller : QObject {
 public:
   Controller();
   ~Controller();
 public slots:
   void writeRequested(QByteArray data);
 private:
   Form1* view;
   Form2* otherView;
   QSerialDevice* port;
 }


 Controller::Controller()
 {
    view = new Form1();
    connect(view, SIGNAL(writeToPort(QByteArray)),this,SLOT(writeRequested(QByteArray data)));
    otherView = new Form2();
    connect(otherView, SIGNAL(writeToPort(QByteArray)),this,SLOT(writeRequested(QByteArray data)));
    port = new QSerialDevice();
    port->open();
 }

Controller::writeRequested(QByteArray data)
{
   if (port && port->isOpen())
   {
      port->write(data);
   }
}

接続を処理し、コントローラーでフォームを切り替える方法は他にもあります。シグナルとスロットを使用すると、クラス間の結合が少なくなり、シリアル ポート コードが UI を詰まらせることを心配する必要がなくなります。

于 2012-06-18T13:40:07.263 に答える