基于QT的第一个项目+所有组件配合使用+网络编程局域网通信+文件IO操作+登录界面和头像+多界面跳转+JSON数据解析+表情包制作

  • 第一阶段 网络编程局域网TCP/IP聊天QT实现
    • main.c
    • mainwindow.h
    • mainwindow.c
    • MainWindow.ui
  • 第二阶段 图片网址加载和天气数据JSON解析源码
    • live.h
    • live.c
    • live.ui
  • 第三阶段 图标实现,表情包制作
    • cpdd.h
    • cpdd.c
    • cpdd.ui


本部分主要是客户端实现部分,下一次写服务器,多多支持啊

第一阶段 网络编程局域网TCP/IP聊天QT实现

记得添加网络核心库

main.c

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QHostAddress>
#include <QTcpSocket>
#include <QLineEdit>
#include <QListWidget>
#include <QTreeWidgetItem>
#include "cpdd.h"
#include <QMessageBox>
#include "live.h"
#include <QPixmap>  //ͼƬ
#include <QDir>
#include <QFileDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
private slots:void on_updatebt_clicked();void recvservermsg();void on_linkbt_clicked();void on_sendbt_clicked();void on_pushButton_3_clicked();void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column);void on_listWidget_itemDoubleClicked(QListWidgetItem *item);void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::MainWindow *ui;QTcpSocket *sock;QStringList msglist;QTreeWidgetItem *item11;QTreeWidgetItem *item12;QTreeWidgetItem *item13;QTreeWidgetItem *item14;QTreeWidgetItem *item21;QTreeWidgetItem *item22;QTreeWidgetItem *item23;QTreeWidgetItem *item24;QTreeWidgetItem *item41;QTreeWidgetItem *item42;QTreeWidgetItem *item43;QTreeWidgetItem *item44;QTreeWidgetItem *item31;QTreeWidgetItem *item32;QTreeWidgetItem *item33;QTreeWidgetItem *item34;QString Item;CPDD *cpdd;live *li;int pp;
};
#endif // MAINWINDOW_H

mainwindow.c

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);pp=2;//设置窗口标题setWindowTitle("客户端008");//初始化套接字对象sock=new QTcpSocket(this);//绑定客户端自己的ip和端口号sock->bind(QHostAddress("192.168.24.xx"),7000);//关联readyRead()信号connect(sock,SIGNAL(readyRead()),this,SLOT(recvservermsg()));//设置水平头 --》树状列表框的树根ui->treeWidget->setHeaderLabel("我的好友");QTreeWidgetItem *item33 =new QTreeWidgetItem(QStringList()<<"个人网名");ui->treeWidget->addTopLevelItem(item33);QTreeWidgetItem*tt=new QTreeWidgetItem(QStringList()<<"008");tt->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/666.jpg"));item33->addChild(tt);QTreeWidgetItem*yy=new QTreeWidgetItem(QStringList()<<"005");yy->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/777.jpg"));item33->addChild(yy);QTreeWidgetItem *item1 =new QTreeWidgetItem(QStringList()<<"小学同学");ui->treeWidget->addTopLevelItem(item1);QTreeWidgetItem *item2=new QTreeWidgetItem(QStringList()<<"中学同学");ui->treeWidget->addTopLevelItem(item2);QTreeWidgetItem *item3=new QTreeWidgetItem(QStringList()<<"高中同学");ui->treeWidget->addTopLevelItem(item3);QTreeWidgetItem *item4=new QTreeWidgetItem(QStringList()<<"大学同学");ui->treeWidget->addTopLevelItem(item4);//添加每个顶层节点的子节点item11=new QTreeWidgetItem(QStringList()<<"常威");item12=new QTreeWidgetItem(QStringList()<<"来福");item13=new QTreeWidgetItem(QStringList()<<"包龙新");item14=new QTreeWidgetItem(QStringList()<<"九千岁");item11->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/4.jpg"));item12->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/5.jpg"));item13->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/6.jpg"));item14->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/7.jpg"));item1->addChild(item11);item1->addChild(item12);item1->addChild(item13);item1->addChild(item14);item21=new QTreeWidgetItem(QStringList()<<"九五二七");item22=new QTreeWidgetItem(QStringList()<<"五六三");item23=new QTreeWidgetItem(QStringList()<<"五二零");item24=new QTreeWidgetItem(QStringList()<<"一三一四");item21->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/111.jpg"));item22->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/222.jpg"));item23->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/333.jpg"));item24->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/444.jpg"));item2->addChild(item21);item2->addChild(item22);item2->addChild(item23);item2->addChild(item24);item31=new QTreeWidgetItem(QStringList()<<"小红");item32=new QTreeWidgetItem(QStringList()<<"小明");item33=new QTreeWidgetItem(QStringList()<<"小蓝");item34=new QTreeWidgetItem(QStringList()<<"小绿");item31->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/555.jpg"));item32->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/666.jpg"));item33->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/777.jpg"));item34->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/888.jpg"));item3->addChild(item31);item3->addChild(item32);item3->addChild(item33);item3->addChild(item34);QTreeWidgetItem *item41=new QTreeWidgetItem(QStringList()<<"郭德纲");QTreeWidgetItem *item42=new QTreeWidgetItem(QStringList()<<"刘谦");QTreeWidgetItem *item43=new QTreeWidgetItem(QStringList()<<"沈腾");QTreeWidgetItem *item44=new QTreeWidgetItem(QStringList()<<"周星驰");item41->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/8.jpg"));item42->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/9.jpg"));item43->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/10.jpg"));item44->setIcon(0,QIcon("C:/Users/newuser/Desktop/TXT/11.jpg"));item4->addChild(item41);item4->addChild(item42);item4->addChild(item43);item4->addChild(item44);
}
MainWindow::~MainWindow()
{delete ui;
}//********************************************************
//更新好友列表
void MainWindow::on_updatebt_clicked()
{//把listwidget原本显示的内容清空ui->listWidget->clear();//给服务器发送一个字符串"getlist"sock->write("update");//在listwidget上显示for(int i=0; i<msglist.size(); i++)ui->listWidget->addItem(msglist.at(i));
}
//********************************************************
//专门接收服务器发送过来的信息
void MainWindow::recvservermsg()
{//打开文件//创建QFileQMessageBox::information(this,"信息","有消息",QMessageBox::Yes);QFile myfile("C:/Users/newuser/Desktop/TXT/历史记录.txt");//打开文件bool ret1=myfile.open(QIODevice::ReadWrite|QIODevice::Append);if(!ret1){qDebug()<<"打开文件失败";return;}QByteArray buf=sock->readAll();QString str(buf);bool isflag = str.contains("/");//判断要显示的内容bool ret =str.contains("192.168.24");if(ret == true){//字符串的拆分,显示更新好友列表msglist=str.split("#");}//内容包含表情包else if(isflag == true){QStringList mylist =str.split("/");for(int i=0;i<mylist.size();i++){if(mylist.at(i)=="行者孙"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/1.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="小明"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/2.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="小红"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/3.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="小三"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/4.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="美女"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/5.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="棒槌"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/6.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="风景"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/7.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}else if(mylist.at(i)=="火柴女"){ui->textEdit->append(mylist.at(i-1));myfile.write(ui->textEdit->toPlainText().toUtf8());QPixmap mymap("C:/Users/newuser/Desktop/TXT/8.jpg");mymap.scaled(ui->tu->width(),ui->tu->height());ui->tu->setScaledContents(true);ui->tu->setPixmap(mymap);}}}else{//在文本编辑框中显示出来myfile.write(ui->textEdit->toPlainText().toUtf8());ui->textEdit->append(buf);}}
//**********************************************************
//连接服务器
void MainWindow::on_linkbt_clicked()
{//获取输入的服务器ip和端口号QString str1 = ui->iple->text();QString str2 = ui->portle->text();//连接到服务器sock->connectToHost(QHostAddress(str1),str2.toInt());
}
//****************************************************************
//发送消息
void MainWindow::on_sendbt_clicked()
{//获取客户端输入的信息QString buf = ui->textEdit_2->toPlainText();//发送给服务器sock->write(buf.toUtf8());
}//************************************************************************
//清空聊天记录
void MainWindow::on_pushButton_3_clicked()
{ui->textEdit->clear();ui->tu->clear();
}//***********************************************************************************
//跳转聊天槽函数    离线
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{//判断选择了那个好友聊天Item = item->text(column);//qDebug()<<list.at(i);cpdd =new CPDD(this);cpdd->getsock(sock);cpdd->show(); //私人聊天窗口this->hide();
}//*************************************************************************
//双击在线好友方便聊天
void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{QString st =item->text();QMessageBox::StandardButtons ret = QMessageBox::information(this,"聊天","进入",QMessageBox::Yes|QMessageBox::No);if(ret == QMessageBox::Yes){cpdd =new CPDD(this);cpdd->getsock(sock);cpdd->show(); //私人聊天窗口this->hide();}}
//_______________________________________________________________________________________
//历史聊天记录
void MainWindow::on_pushButton_clicked()
{li = new live(this);li->show();this->hide();
}//*****************************************************************************************
//更换头像
void MainWindow::on_pushButton_2_clicked()
{//弹出目录对话框--》只显示目录QString dirpath=QFileDialog::getExistingDirectory(this);//创建QDir对象QDir mydir(dirpath);//获取目录中的内容QStringList mylist=mydir.entryList();//获取目录中所有文件的大小,类型if(pp<mylist.size()){//拼接得到文件的绝对路径名QString allpath=QString("%1/%2").arg(dirpath).arg(mylist.at(pp));QFileInfo myinfo(allpath);
//         //打印文件名字和大小qDebug()<<allpath;
//         //判断文件类型
//         if(myinfo.isDir())  //是目录
//            qDebug()<<"是个目录";
//          else //是普通文件
//            qDebug()<<"是普通文件";//QString dtr= myinfo.suffix();//qDebug()<<dtr;//if(n==i&&dtr =="jpg")// {QPixmap map1(allpath);ui->label_2->setPixmap(map1);map1.scaled(ui->label_2->width(),ui->label_2->height()); //调整图片的宽高,让其跟标签一致ui->label_2->setScaledContents(true); //让图片可以适应标签pp++;// }}
}

MainWindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>480</height></rect></property><property name="minimumSize"><size><width>800</width><height>480</height></size></property><property name="maximumSize"><size><width>800</width><height>480</height></size></property><property name="windowTitle"><string>MainWindow</string></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 85, 255);</string></property><widget class="QWidget" name="centralwidget"><widget class="QLineEdit" name="portle"><property name="geometry"><rect><x>370</x><y>30</y><width>181</width><height>51</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(0, 255, 255);</string></property><property name="placeholderText"><string>服务器端口号</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>410</x><y>120</y><width>191</width><height>21</height></rect></property><property name="font"><font><family>Arial</family><pointsize>14</pointsize></font></property><property name="styleSheet"><string notr="true">background-color: rgb(170, 85, 255);</string></property><property name="text"><string>         全体消息</string></property></widget><widget class="QListWidget" name="listWidget"><property name="geometry"><rect><x>0</x><y>160</y><width>211</width><height>271</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property></widget><widget class="QPushButton" name="sendbt"><property name="geometry"><rect><x>610</x><y>130</y><width>181</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">font: 14pt &quot;Arial&quot;;
background-color: rgb(255, 255, 0);
color: rgb(0, 0, 0);</string></property><property name="text"><string>发送到服务器</string></property></widget><widget class="QPushButton" name="linkbt"><property name="geometry"><rect><x>0</x><y>30</y><width>111</width><height>51</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(255, 0, 0);</string></property><property name="text"><string>连接服务器</string></property></widget><widget class="QLineEdit" name="iple"><property name="geometry"><rect><x>110</x><y>30</y><width>261</width><height>51</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 255, 255);
color: rgb(0, 0, 0);</string></property><property name="placeholderText"><string>服务器ip</string></property></widget><widget class="QTextEdit" name="textEdit"><property name="geometry"><rect><x>410</x><y>140</y><width>191</width><height>261</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property></widget><widget class="QPushButton" name="updatebt"><property name="geometry"><rect><x>0</x><y>130</y><width>211</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 255, 0);
color: rgb(0, 0, 0);</string></property><property name="text"><string>更新好友</string></property></widget><widget class="QTextEdit" name="textEdit_2"><property name="geometry"><rect><x>610</x><y>160</y><width>181</width><height>271</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property></widget><widget class="QPushButton" name="pushButton_3"><property name="geometry"><rect><x>410</x><y>400</y><width>191</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(170, 255, 0);</string></property><property name="text"><string>清空消息列表</string></property></widget><widget class="QTreeWidget" name="treeWidget"><property name="geometry"><rect><x>230</x><y>130</y><width>171</width><height>301</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property><column><property name="text"><string notr="true">1</string></property></column></widget><widget class="QLabel" name="tu"><property name="geometry"><rect><x>408</x><y>359</y><width>191</width><height>41</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property><property name="text"><string>map</string></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>410</x><y>90</y><width>191</width><height>29</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 0, 0);</string></property><property name="text"><string>历史记录天气和图片网址</string></property></widget><widget class="QLabel" name="label_2"><property name="geometry"><rect><x>710</x><y>10</y><width>69</width><height>61</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 255, 0);</string></property><property name="text"><string/></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>710</x><y>70</y><width>71</width><height>21</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 0, 0);
color: rgb(255, 0, 0);</string></property><property name="text"><string>头像</string></property></widget></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>26</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

第二阶段 图片网址加载和天气数据JSON解析源码

live.h

#ifndef LIVE_H
#define LIVE_H#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>//加载图片
#include <QUrl>
#include <QPixmap>
#include <QNetworkAccessManager>
#include <QNetworkReply>
//解析天气
//#include <QJsonDocument>
//#include <QJsonObject>
//#include <QJsonArray>
//#include <QJsonValue>
//#include <QJsonParseError>namespace Ui {class live;
}class live : public QMainWindow
{Q_OBJECTpublic:explicit live(QWidget *parent = nullptr);~live();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void recvhttpmap(QNetworkReply *); //接收void recvhttp(QNetworkReply *);void on_pushButton_5_clicked();private:Ui::live *ui;QString path;QNetworkAccessManager manager;  //获取地图QNetworkAccessManager man;  //获取天气
};#endif // LIVE_H

live.c

#include "live.h"
#include "ui_live.h"
#include <QDebug>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QNetworkRequest>
live::live(QWidget *parent) :QMainWindow(parent),ui(new Ui::live)
{ui->setupUi(this);//关联finished信号connect(&manager,SIGNAL(finished(QNetworkReply *)),this,SLOT(recvhttpmap(QNetworkReply *)));//关联finished信号connect(&man,SIGNAL(finished(QNetworkReply *)),this,SLOT(recvhttp(QNetworkReply *)));
}live::~live()
{delete ui;
}//查看聊天记录
void live::on_pushButton_clicked()
{//弹出文件对话框path=QFileDialog::getOpenFileName(this,"历史文件");//创建QFileQFile myfile(path);//打开文件bool ret=myfile.open(QIODevice::ReadOnly);if(!ret){qDebug()<<"打开文件失败";return;}//读取文件内容//char buf[20]={0};//myfile.read(buf,10);QByteArray buf=myfile.readAll();//qDebug()<<buf;  //中文存放到QByteArray中打印出来的是十六进制编码//把QByteArray转换成QStringQString str(buf);qDebug()<<str;//把读取的内容在文本浏览器中显示出来ui->textBrowser->setText(str);//把读取的内容在文本编辑框中显示出来//ui->textEdit->setText(str);//关闭文件myfile.close();
}//返回上级
void live::on_pushButton_2_clicked()
{QWidget *pt = parentWidget();pt->show();delete this;
}//删除历史记录
void live::on_pushButton_3_clicked()
{//创建QFileQFile myfile(path);QMessageBox::StandardButtons ret1 =QMessageBox::warning(this,"删除","你确定清空吗?",QMessageBox::Yes|QMessageBox::No);//打开文件if(ret1 ==QMessageBox::Yes){ui->textBrowser->clear();        bool ret=myfile.open(QIODevice::ReadWrite|QIODevice::Truncate);if(!ret){qDebug()<<"打开文件失败";return;}}}//******************************************************************
//加载图片  ????????网址
void live::on_pushButton_4_clicked()
{//htts是加密的  http没有加密//获取输入框中的网址//http://img1.baidu.com/it/u=4226433976,2358924813&fm=26&fmt=auto//http://img0.baidu.com/it/u=1834536063,783288348&fm=26&fmt=auto//ui->lineEdit->setText("http://img1.baidu.com/it/u=4226433976,2358924813&fm=26&fmt=auto");QString str=ui->lineEdit->text();QUrl url(str);//创建http请求QNetworkRequest req(url);//发送该请求manager.get(req);
}
//**********************************************************************************
//接收服务器回复的应答信息
void live::recvhttpmap(QNetworkReply *reply)
{//读取http应答信息QByteArray buf=reply->readAll();//由于我现在是从网上下载一张图片过来,buf中的数据就是图片的像素点颜色值QPixmap map;map.loadFromData(buf);map.scaled(ui->label->width(),ui->label->height());ui->label->setScaledContents(true);ui->label->setPixmap(map);
}//**************************************************************************
//获取天气预报的按钮
void live::on_pushButton_5_clicked()
{//获取输入框中的网址http://www.weather.com.cn/data/cityinfo/101010100.htmlQString buf=ui->lineEdit_2->text();QUrl l(buf);//创建http请求QNetworkRequest reqq(l);//发送该请求man.get(reqq);}
//**************************************************************************
//接收服务器回复的应答信息
void live::recvhttp(QNetworkReply *reply)
{//读取http应答信息http://www.weather.com.cn/data/cityinfo/101010100.htmlQByteArray buf=reply->readAll();//qDebug()<<buf;//由于我现在是从网上获取天气预报信息,buf中的数据就是天气预报数据// ui->textEdit->setText(buf);//天气预报数据是json格式,我来解析一下//把获取的json数据标准化存储QJsonParseError myerr;QJsonDocument mydoc=QJsonDocument::fromJson(buf,&myerr);//剥洋葱//获取最外面的对象QJsonObject obj = mydoc.object();//obj存放的就是"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云转阴","img1":"n1.gif","img2":"d2.gif","ptime":"18:00"}//继续获取键值对中的键和值QJsonValue val = obj.value("weatherinfo");//val存放的就是{"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云转阴","img1":"n1.gif","img2":"d2.gif","ptime":"18:00"}QJsonObject obj1 = val.toObject();//obj1存放的就是"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云转阴","img1":"n1.gif","img2":"d2.gif","ptime":"18:00"QJsonValue val1=obj1.value("city"); //北京QJsonValue val2=obj1.value("temp1");//最低气温QJsonValue val3=obj1.value("temp2");//最高气温QJsonValue val4=obj1.value("weather");//云的状态QJsonValue val5=obj1.value("cityid");//城市idQJsonValue val6=obj1.value("ptime");//时间QString v2="最低温度";QString cmd = QString("%1:%2").arg(v2).arg(val2.toString());QString v3="最高温度";QString cmd1 = QString("%1:%2").arg(v3).arg(val3.toString());QString v4="城市";QString cmd2 = QString("%1:%2").arg(v4).arg(val1.toString());QString v5="时间";QString cmd3 = QString("%1:%2").arg(v5).arg(val6.toString());QString v6="城市id";QString cmd4 = QString("%1:%2").arg(v6).arg(val5.toString());QString v7="天气变化";QString cmd5 = QString("%1:%2").arg(v7).arg(val4.toString());ui->textBrowser_2->append(cmd5);ui->textBrowser_2->append(cmd2);ui->textBrowser_2->append(cmd4);ui->textBrowser_2->append(cmd3);ui->textBrowser_2->append(cmd);ui->textBrowser_2->append(cmd1);//qDebug()<<val.toString();//例子二:http请求获取网络上的天气预报//http://www.weather.com.cn/data/cityinfo/101010100.html
}

live.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>live</class><widget class="QMainWindow" name="live"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>480</height></rect></property><property name="maximumSize"><size><width>800</width><height>480</height></size></property><property name="windowTitle"><string>MainWindow</string></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property><widget class="QWidget" name="centralwidget"><widget class="QTextBrowser" name="textBrowser"><property name="geometry"><rect><x>0</x><y>110</y><width>281</width><height>371</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(170, 255, 255);
font: 20pt &quot;Arial&quot;;
color: rgb(0, 0, 0);</string></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>2</x><y>68</y><width>151</width><height>41</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(170, 170, 0);</string></property><property name="text"><string>查看聊天记录</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>0</x><y>0</y><width>93</width><height>41</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 255, 0);
color: rgb(0, 0, 0);</string></property><property name="text"><string>返回</string></property></widget><widget class="QPushButton" name="pushButton_3"><property name="geometry"><rect><x>180</x><y>70</y><width>93</width><height>41</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(0, 255, 0);
color: rgb(0, 0, 0);</string></property><property name="text"><string>清空聊天记录</string></property></widget><widget class="QLineEdit" name="lineEdit"><property name="geometry"><rect><x>320</x><y>60</y><width>481</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 170, 0);</string></property><property name="placeholderText"><string>http://img0.baidu.com/it/u=1834536063,783288348&amp;fm=26&amp;fmt=auto</string></property></widget><widget class="QPushButton" name="pushButton_4"><property name="geometry"><rect><x>320</x><y>30</y><width>81</width><height>29</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(0, 255, 127);</string></property><property name="text"><string>加载图片</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>320</x><y>90</y><width>481</width><height>151</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 170, 255);</string></property><property name="text"><string>TextLabel</string></property></widget><widget class="QPushButton" name="pushButton_5"><property name="geometry"><rect><x>330</x><y>250</y><width>93</width><height>29</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(0, 255, 127);</string></property><property name="text"><string>加载天气</string></property></widget><widget class="QLineEdit" name="lineEdit_2"><property name="geometry"><rect><x>330</x><y>280</y><width>471</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 170, 0);</string></property><property name="placeholderText"><string>http://www.weather.com.cn/data/cityinfo/101010100.html</string></property></widget><widget class="QTextBrowser" name="textBrowser_2"><property name="geometry"><rect><x>330</x><y>310</y><width>471</width><height>141</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(239, 255, 231);</string></property></widget><zorder>pushButton_5</zorder><zorder>textBrowser</zorder><zorder>pushButton</zorder><zorder>pushButton_2</zorder><zorder>pushButton_3</zorder><zorder>lineEdit</zorder><zorder>pushButton_4</zorder><zorder>label</zorder><zorder>lineEdit_2</zorder><zorder>textBrowser_2</zorder></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

第三阶段 图标实现,表情包制作

cpdd.h

#ifndef CPDD_H
#define CPDD_H#include <QMainWindow>
#include <QTcpSocket>
#include <QListWidgetItem>
namespace Ui {class CPDD;
}class CPDD : public QMainWindow
{Q_OBJECTpublic:explicit CPDD(QWidget *parent = nullptr);~CPDD();void getsock(QTcpSocket *sockfd);
private slots:void on_sendbt_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();void on_listWidget_itemClicked(QListWidgetItem *item);private:Ui::CPDD *ui;QTcpSocket *sockfd;QStringList msg;
};#endif // CPDD_H

cpdd.c

#include "cpdd.h"
#include "ui_cpdd.h"CPDD::CPDD(QWidget *parent) :QMainWindow(parent),ui(new Ui::CPDD)
{ui->setupUi(this);setWindowTitle("好友TT");
}CPDD::~CPDD()
{delete ui;
}
//*********************************************************************
//结收参数
void CPDD::getsock(QTcpSocket *sock)
{this->sockfd=sock;
}//*****************************************************************
//私人发送消息  我发信息给谁???A-》服务器->B
void CPDD::on_sendbt_clicked()
{//获取客户端输入的信息  把发送者的ip和端口号也发过去QString buf = ui->textEdit_2->toPlainText();//发送给服务器sockfd->write(buf.toUtf8());
}//**********************************************************************
//返回界面
void CPDD::on_pushButton_clicked()
{QWidget *pt = parentWidget();pt->show();delete this;
}//***********************************************************************//************************************************************************
//聊天表情管理
void CPDD::on_pushButton_2_clicked()
{//往横向列表框中添加列表项QIcon map("C:/Users/newuser/Desktop/TXT/1.jpg");  //定义图标QListWidgetItem *item = new QListWidgetItem(map,"/行者孙");ui->listWidget->addItem(item);QIcon map1("C:/Users/newuser/Desktop/TXT/2.jpg");  //定义图标QListWidgetItem *item1 = new QListWidgetItem(map1,"/小明");ui->listWidget->addItem(item1);QIcon map2("C:/Users/newuser/Desktop/TXT/3.jpg");  //定义图标QListWidgetItem *item2 = new QListWidgetItem(map2,"/小红");ui->listWidget->addItem(item2);QIcon map3("C:/Users/newuser/Desktop/TXT/4.jpg");  //定义图标QListWidgetItem *item3 = new QListWidgetItem(map3,"/小三");ui->listWidget->addItem(item3);//往横向列表框中添加列表项QIcon map11("C:/Users/newuser/Desktop/TXT/5.jpg");  //定义图标QListWidgetItem *item11 = new QListWidgetItem(map11,"/美女");ui->listWidget->addItem(item11);QIcon map12("C:/Users/newuser/Desktop/TXT/6.jpg");  //定义图标QListWidgetItem *item12 = new QListWidgetItem(map12,"/棒槌");ui->listWidget->addItem(item12);QIcon map22("C:/Users/newuser/Desktop/TXT/7.jpg");  //定义图标QListWidgetItem *item22 = new QListWidgetItem(map22,"/风景");ui->listWidget->addItem(item22);QIcon map33("C:/Users/newuser/Desktop/TXT/8.jpg");  //定义图标QListWidgetItem *item33 = new QListWidgetItem(map33,"/火柴女");ui->listWidget->addItem(item33);
}//****************************************************************************//添加表情进发送框
void CPDD::on_listWidget_itemClicked(QListWidgetItem *item)
{//qDebug()<<item->text();QString str = item->text();ui->textEdit_2->setTextColor(Qt::red); //设置颜色ui->textEdit_2->append(str);}

cpdd.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>CPDD</class><widget class="QMainWindow" name="CPDD"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>480</height></rect></property><property name="minimumSize"><size><width>100</width><height>100</height></size></property><property name="windowTitle"><string>MainWindow</string></property><property name="styleSheet"><string notr="true">background-color: rgb(170, 170, 127);</string></property><widget class="QWidget" name="centralwidget"><widget class="QTextEdit" name="textEdit_2"><property name="geometry"><rect><x>220</x><y>100</y><width>241</width><height>311</height></rect></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 255, 255);</string></property></widget><widget class="QPushButton" name="sendbt"><property name="geometry"><rect><x>220</x><y>70</y><width>241</width><height>31</height></rect></property><property name="styleSheet"><string notr="true">font: 14pt &quot;Arial&quot;;
background-color: rgb(255, 255, 0);
color: rgb(0, 0, 0);</string></property><property name="text"><string>发送给好友</string></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>0</x><y>430</y><width>93</width><height>29</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(0, 255, 0);</string></property><property name="text"><string>返回</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>460</x><y>380</y><width>81</width><height>29</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(0, 255, 0);</string></property><property name="text"><string>聊天表情</string></property></widget><widget class="QListWidget" name="listWidget"><property name="geometry"><rect><x>540</x><y>220</y><width>256</width><height>192</height></rect></property><property name="styleSheet"><string notr="true">color: rgb(0, 0, 0);
background-color: rgb(255, 255, 255);</string></property></widget></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

预计还有四五个项目,目的都是整合前面的知识,让你成为独立的大师

基于QT的【第一个项目】设计+所有组件配合使用+网络编程局域网通信+文件IO操作+登录界面和头像+多界面跳转+JSON数据解析+表情包制作相关推荐

  1. qt 实现html 编辑器,基于QT的HTML编辑器的设计与实现.doc

    PAGE PAGE 1 郑州大学毕业设计(论文) 题 目:基于Qt的html编辑器的设计与实现 指导教师: 职称: 学生姓名: 学号: 专 业: 院(系): 完成时间: 2012年5月10日 2012 ...

  2. qt制作一个画板_基于Qt的画图板的设计与实现(含录像)

    基于Qt的画图板的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文20000字,程序代码,答辩PPT,答辩视频录像) 摘要 本文的主要内容是记述画图板的设计与实现课程设计中的一些关键技术和辅 ...

  3. 基于qt的计算机论文,基于qt的科学计算器的设计与实现本科毕业论文.doc

    基于qt的科学计算器的设计与实现 摘 要 随着科技的飞速发展,人类已经进入信息化的大时代.信息技术发展更是日新月异,计算器已经进入而且融入人们生活的各个领域,在现代生活中无处不在,大型复杂的计算是人脑 ...

  4. ubuntu下qt模拟键盘按键按下_基于QT的跨平台虚拟键盘设计与实现

    摘  要: 针对QT在Windows.Linux.以及嵌入式Linux-arm等不同平台下没有开源.高效的虚拟键盘(包含中文输入法),以及QT版本升级造成代码不兼容等问题,设计并实现了一个跨平台的虚拟 ...

  5. Twain的学习记录和基于Qt的相关开源项目详解

    Twain学习记录和基于Qt的开源项目详解 twpp-qml 适用于 C++11 及更高版本的便携式.仅标头 TWAIN 框架. 原项目作者使用Qtwidget基于Twain静态传输一张图片 我基于h ...

  6. 基于QT开发的使用OPC_UA与西门子1200,1500系列PLC通信的工业监控Demo

    目录 一,总体介绍 二,需要的软件 三,需要的硬件 四,QT程序代码 五,西门子PLC代码 一,总体介绍 先看一下图1-1的QT运行界面图,界面中服务器地址就是OPC_UA服务器地址,整个项目作用,就 ...

  7. 项目:“表情包”制作---利用ffmpeg制作Gif动态图

    文章目录 项目背景 可行性分析 需求分析 总体设计 详细设计 项目测试 项目结果 项目源码 项目背景 随着互联网传播技术的普及和网络社交文化的繁荣,传统的文字传播在日常表达上不具有完整的信息,同样一句 ...

  8. 果蔬连连看java源代码_《基于Qt的连连看游戏的设计》-毕业论文.doc

    PAGE 精品 摘 要 在现今电子信息高速发展的时代,电子游戏已然成为大众最受欢迎的娱乐消遣方式,经典的连连看是个老少皆宜的小游戏,它实现由各式各样的成对图片组成,然后存储在一个二维的数组中,计算机随 ...

  9. 基于Qt智能仪器仪表通讯软件设计

    目录 1.比如电量测试仪表PF9810,PF9811, 2.使用串口调试助手进行通讯测试 3.根据需求设计软件界面 4.软件开发的步骤 1.UI设计,Qt为例 2.文件管理 3.逻辑设计 1.比如电量 ...

最新文章

  1. golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流
  2. Java面试题基础知识(收集)
  3. php读这文件速度,php 测试硬盘读写-php 测试硬盘写速率
  4. 【CentOS 7Shell编程4】,shell中的case判断#180208
  5. java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
  6. 网管师职业规划(3)
  7. PMP第五章:项目范围管理
  8. 计算机函数公式 加法,excel怎样使用加法函数公式
  9. html 5标签读音,radish读音
  10. Cesium中获取坐标点地形高程的方法
  11. 互联网大数据面试题集锦
  12. Macintosh30周年回顾视频 ---转自36kr
  13. 我的一百个2019(五):2019,我为什么还在坚持?
  14. WPF UnhandledException
  15. Word中的字体大小(几号-几磅)
  16. B.系数 (Lucas定理)
  17. html样式表是不是css,css样式是什么
  18. odbc sqlstate:IM004
  19. 路德维希·冯·米塞斯
  20. centos7配置 console口_7.5. Configuring the Linux Console

热门文章

  1. pdf 转 word 支持各种格式【在线办公工具】
  2. linux查看所有文件
  3. 论文阅读Measuring Regularity of Individual Travel Patterns
  4. android手机 一键还原,安卓手机一键恢复通讯录
  5. TB6612使用说明,使用方法,引脚图,实物图。
  6. Windows8下使用Oracle10G的忧伤
  7. Android Studio 项目依赖由于资源在国外而下载不了的问题
  8. 要不要启用苹果wapi_苹果“史上最强”系统ios13来了,要不要升级?
  9. 用PE安装win11系统
  10. 老旧的API,你应该如何处理?