我有一个使用Qt进行串行通信的项目。这非常简单,因为我使用QSerialDevice
。问题是QSerialDevice
要访问多个表单。
例如,我有2个表单,form1
和form2
。我尝试通过最后一个超级终端发送数据,以便在form1
(已完成)中显示,但无法在form2
中显示。不仅如此,我希望能够port->write
通过form2
。
我的问题是:我们可以将QSerialDevice2.0
用于多个.cpp文件和多个表单吗?
答案 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。