在头文件中引入相关库:
#include <QMainWindow>
#include <QTcpSocket>
#include <QSerialPort>
然后,在主窗口类中定义相关变量:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_connectButton_clicked();
void on_sendButton_clicked();
void readData();
private:
Ui::MainWindow *ui;
QTcpSocket *tcpSocket;
QSerialPort *serialPort;
};
其中,tcpSocket
为 TCP 套接字,serialPort
为串口对象。
在构造函数中初始化 tcpSocket
和 serialPort
:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
tcpSocket = new QTcpSocket(this);
serialPort = new QSerialPort(this);
}
在点击“连接”按钮时,我们需要连接 WiFi,并建立 TCP 连接。这里我们需要先输入 WiFi 的名称和密码,然后使用 QProcess
执行 netsh
命令来连接 WiFi。如果连接成功,我们再建立 TCP 连接。
void MainWindow::on_connectButton_clicked()
{
QString ssid = ui->ssidLineEdit->text();
QString password = ui->passwordLineEdit->text();
QProcess process;
QString cmd = "netsh wlan connect ssid=\"" + ssid + "\" name=\"" + ssid + "\" keyMaterial=\"" + password + "\"";
process.start(cmd);
process.waitForFinished();
tcpSocket->connectToHost("192.168.1.100", 8888);
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readData()));
}
这里假设 WiFi 的 IP 地址为 192.168.1.100,端口为 8888。我们还需要在 readData
函数中处理接收到的数据:
void MainWindow::readData()
{
QByteArray data = tcpSocket->readAll();
ui->textEdit->append(data);
}
当我们点击“发送”按钮时,我们将需要发送的数据通过串口发送出去:
void MainWindow::on_sendButton_clicked()
{
QString data = ui->sendLineEdit->text();
serialPort->write(data.toUtf8());
}
需要注意的是,我们需要先打开串口并设置波特率、数据位、校验位、停止位等参数:
serialPort->setPortName("COM1");
serialPort->setBaudRate(QSerialPort::Baud9600);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->open(QIODevice::ReadWrite);
最后,我们还需要在析构函数中关闭 TCP 连接和串口:
MainWindow::~MainWindow()
{
tcpSocket->close();
serialPort->close();
delete ui;
}
这样,我们就完成了 WiFi 传输并显示数据的功能。