qt 发送数据到http

用到的头文件 

Def.h
#ifndef DEF_H
#define DEF_H
#define SERVER_PORT "10099"
#define SERVER_IP "192.168.169.1"

#endif // DEF_H

Registre.h

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "def.h"
#include <QJsonObject>
#include <QJsonArray>
#include<QJsonDocument>
#include<QJsonValue>


class Register : public QDialog
{
    Q_OBJECT
public:
    explicit Register(QWidget *parent = nullptr);
    //放到成员变量里
     QLineEdit* username;
     QLineEdit* password;
     QLineEdit* password2;

     QNetworkAccessManager* man;


signals:

public slots:
     void slotReg();
     void slotNetworkApply(QNetworkReply*);
};

#endif // REGISTER_H


如果之前有主窗口 那么main.window

#include "register.h"

增加的按钮 还有定义的信号和槽
 QMenuBar* bar = menuBar();
    QMenu* menu = bar->addMenu("文件");
    menu->addAction("打开", this, SLOT(slotOpen()));
    menu->addAction("暂停", this, SLOT(slotPause()));
    menu->addAction("继续", this, SLOT(slotResume()));
    menu->addAction("退出", this, SLOT(close()));
    menu->addAction("登录",this,SLOT(slotLogin()));
    menu->addAction("注册",this,SLOT(slotRegister()));
    QStatusBar* status = statusBar();
    status->addWidget(slider = new QSlider(Qt::Horizontal));
    status->addWidget(speed = new QLineEdit);



void MainWindow::slotRegister()
{

    Register r;
    r.exec();
}


//register.cpp


#include "register.h"
#include <QString>


Register::Register(QWidget *parent) : QDialog(parent)
{
   //放到成员变量里
//    QLineEdit* username;
//    QLineEdit* password;
//    QLineEdit* password2;
QPushButton* r;
    QVBoxLayout* lay = new QVBoxLayout(this);
    lay->addWidget(username= new QLineEdit);
    lay->addWidget(password=new QLineEdit);
     lay->addWidget(password2=new QLineEdit);
     lay->addWidget( r= new QPushButton("注册"));

     username->setPlaceholderText("请输入用户明");
     password->setPlaceholderText("请输入密码");
    password2->setPlaceholderText("密码确认");

    this->setWindowTitle("注册");

    connect(r,SIGNAL(clicked()),this,SLOT(slotReg()));

    //窗口释放 对象也释放掉 +上this 是这意思
    man = new QNetworkAccessManager(this);

    connect(man,SIGNAL(finished(QNetworkReply*)),this,SLOT(slotNetworkApply(QNetworkReply*)));



}


void Register::slotReg()
{
    QString username = this->username->text();
    QString password = this->password->text();
    QString password2 = this->password2->text();

    if(password!=password2)
    {
        QMessageBox::warning(NULL,"注册失败","密码输入错误");
        return;
    }

    //把注册信息提交到服务器 libcurl

    QNetworkRequest req;
    QString url=QString("http://%1:%2/reg").arg(SERVER_IP).arg(SERVER_PORT);
    //下面这种拼接必须同类型
    //QString temp =QString("http://%1:%2/reg").arg(SERVER_IP,SERVER_PORT);
    //QUrl url1(temp);
    req.setUrl(url);
    //gaosu fu wuqi  shi json geshi

    req.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");

   // req.setUrl();
    //req.setUrl(&(QUrl(QString("http://%1/user").arg(SERVER_IP))));
    //req.setUrl(QUrl(QString("http://%1").arg(SERVER_IP)));
    //man->post();
    /*
        username:xxx
        passwd:yyy
    */

    QJsonObject obj;
    obj.insert("username",username);
    obj.insert("password",password);

    QByteArray data = QJsonDocument(obj).toJson();
    man->post(req,data);

    //man->post()


}

void Register::slotNetworkApply(QNetworkReply*)
{

}




中间涉及到 没有指定json的问题

这里只是发送 接受的尚未完善 


接受数据如下 

void Register::slotNetworkApply(QNetworkReply *reply )
{

if(reply->error()!=QNetworkReply::NoError)
    {
        QMessageBox::warning(this,"注册失败","网络错误");
        return ;
    }

    QByteArray data = reply->readAll();
    QJsonDocument doc =QJsonDocument::fromJson(data);
    QJsonObject obj = doc.object();
    QString result = obj.value("result").toString();

    if(result=="ok")
    {

        QMessageBox::warning(this,"注册成功","尽情享用");
        accept();//关闭对话框
    }
    else
    {

        QString info = QString("服务器返回错误:%1,请联系技术人员").arg(obj.value("reason").toString());
        QMessageBox::warning(this,"注册失败",info);
    }


}



Qt发送数据到串口可以通过使用QSerialPort类来实现。下面是一个简单的示例代码: ```cpp #include <QCoreApplication> #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 获取可用的串口列表 QList<QSerialPortInfo> portList = QSerialPortInfo::availablePorts(); foreach (const QSerialPortInfo &portInfo, portList) { qDebug() << "串口名:" << portInfo.portName(); qDebug() << "制造商:" << portInfo.manufacturer(); qDebug() << "描述:" << portInfo.description(); qDebug() << "序列号:" << portInfo.serialNumber(); qDebug() << "系统位置:" << portInfo.systemLocation(); qDebug() << "--"; } // 创建串口对象 QSerialPort serial; // 设置串口名 serial.setPortName("COM1"); // 打开串口 if (!serial.open(QIODevice::ReadWrite)) { qDebug() << "无法打开串口!"; return a.exec(); } // 设置波特率 serial.setBaudRate(QSerialPort::Baud9600); // 设置数据位数 serial.setDataBits(QSerialPort::Data8); // 设置奇偶校验 serial.setParity(QSerialPort::NoParity); // 设置停止位 serial.setStopBits(QSerialPort::OneStop); // 设置流控制 serial.setFlowControl(QSerialPort::NoFlowControl); // 发送数据 QByteArray sendData = "Hello, Serial Port!"; serial.write(sendData); // 关闭串口 serial.close(); return a.exec(); } ``` 上述代码首先通过QSerialPortInfo类获取可用的串口列表,并输出相关信息。然后创建一个QSerialPort对象,设置串口名、波特率、数据位数、奇偶校验、停止位和流控制等参数。接下来,通过write()函数发送数据到串口。最后,关闭串口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值