在头文件中引入相关库:

#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 为串口对象。

在构造函数中初始化 tcpSocketserialPort

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 传输并显示数据的功能。