あなたが何をしようとしているのかを私が知ることができるのは、シリアルポートからデータを送信するために使用できる 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 を詰まらせることを心配する必要がなくなります。