Qt 的网络模块和串口模块来实现 WiFi 传输和数据显示

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Qt 的网络模块和串口模块来实现 WiFi 传输和数据显示,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在头文件中引入相关库:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156014.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!