如何在Qt中传达多形式

时间:2012-06-16 13:59:24

标签: qt serial-port

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

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

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

2 个答案:

答案 0 :(得分:2)

而不是QSerialDevice使用更好的QtSerialPort http://qt-project.org/wiki/QtSerialPort

答案 1 :(得分:1)

据我所知,你要做的是有两种不同的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。