如何在Qt中进行多种形式的通信

如何在Qt中进行多种形式的通信,qt,serial-port,Qt,Serial Port,我有一个关于使用Qt进行串行通信的项目。这非常简单,因为我使用QSerialDevice。问题是使多个表单可由QSerialDevice访问 例如,我有两个表单,form1和form2。我尝试通过最后一个超级终端发送数据,以格式1(完成)显示,但无法在格式2中显示。不仅如此,我还希望能够通过form2完成port->write 我的问题是:我们可以将QSerialDevice2.0与多个.cpp文件和多个表单一起使用吗?从中我可以看出,您想要做的是拥有两个不同的UI表单,可用于将数据发送到串行端

我有一个关于使用Qt进行串行通信的项目。这非常简单,因为我使用
QSerialDevice
。问题是使多个表单可由
QSerialDevice
访问

例如,我有两个表单,
form1
form2
。我尝试通过最后一个超级终端发送数据,以
格式1
(完成)显示,但无法在
格式2
中显示。不仅如此,我还希望能够通过
form2
完成
port->write


我的问题是:我们可以将
QSerialDevice2.0
与多个.cpp文件和多个表单一起使用吗?

从中我可以看出,您想要做的是拥有两个不同的UI表单,可用于将数据发送到串行端口。我目前正在为一个项目处理一个几乎相同的问题,我要做的是使用一种风格的体系结构来解决这个问题

拥有一个知道显示哪个表单并有权访问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。

从我可以看出,您想要做的是使用两种不同的UI表单将数据发送到串行端口。我目前正在为一个项目处理一个几乎相同的问题,我要做的是使用一种风格的体系结构来解决这个问题

拥有一个知道显示哪个表单并有权访问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。

使用更好的QtSerialPort而不是QSSerialDevice使用更好的QtSerialPort提供完整、可编译的代码示例。否则你就真的不能问问题了。我们无法预测你真正的问题是什么。向我们展示代码。提供完整、可编译的代码示例。否则你就真的不能问问题了。我们无法预测你真正的问题是什么。给我们看看代码。