学习Qt(10)
来源:互联网 发布:ios手游网络加速器 编辑:程序博客网 时间:2024/05/21 10:56
1.网络通信
1)获取本机网络信息:主要使用QHostInfo、QNetWorkInternet和QNetWorkAddressEntry类;
2)注意引用QNetWork需要在pro文件中添加QT += network;
3)Udp协议:QUdpSocket实现udp的应用。Udp服务器和客户端不建立连接,只是调用接收和发送函数进行数据传输;
4)Udp通信主要使用的函数有:writeDatagram写入消息, readDatagram读取消息, hasPendingDatagram 等待接收消息;
5)Tcp协议:QTcpSocket和QTcpServer实现tcp的应用。Tcp服务器和客户端必须利用三次握手协议进行建立通信连接,进行数据传输;
6)QNetworkRequest类:表示网络请求,用于作为与请求有关的信息的统一的容器,在创建网络请求时指定的URL决定了请求使用的协议,包括HTTP、FTP等;
7)QNetworkAceessManager用于协调网络操作,每当创建一个网络请求后,用于调度网络请求,并且发射信号来报告进度;
8)QNetworkReply用于表示网络请求的应带;
9)网络代码示例:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); manager = new QNetworkAccessManager(this); connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://www.baidu.com"))); ui->progressBar->hide(); } MainWindow::~MainWindow(){ delete ui;} void MainWindow::replyFinished(QNetworkReply *reply){ QString all = reply->readAll(); ui->textBrowser->setText(all); reply->deleteLater();} void MainWindow::startRequest(QUrl url){ reply = manager->get(QNetworkRequest(url)); connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead())); connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64))); connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));} void MainWindow::httpReadyRead(){ if(file)file->write(reply->readAll());} void MainWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes){ ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(bytesRead);} void MainWindow::httpFinished(){ ui->progressBar->hide(); file->flush(); file->close(); reply->deleteLater(); reply = NULL; delete file; file = NULL;} void MainWindow::on_pushButton_clicked(){ url = ui->lineEdit->text(); QFileInfo info(url.path()); QString fileName(info.fileName()); file = new QFile(fileName); if(!file->open(QIODevice::WriteOnly)) { delete file; file = NULL; return; } startRequest(url); ui->progressBar->setValue(0); ui->progressBar->show();}
2.事件处理
1)鼠标事件:mousePressEvent鼠标按下,mouseMoveEvent鼠标移动,mouseReleaseEvent鼠标释放,mouseDoubleClickEvent鼠标双击;
2)键盘事件:keyPressEvent键盘按下,keyReleaseEvent键盘释放;
3)安装事件过滤器,可以在时间到来之前捕获,进行处理,installEventFilter,利用eventFilter函数对过滤时间进行处理。
- 学习Qt(10)
- QT学习(一)
- Qt学习(1)
- QT学习(一)
- QT学习(二)
- QT学习(三)
- QT学习(一)
- Qt学习(一)
- QT学习(宽翼)
- Qt学习(1)
- QT学习(五)QT 连接 sqlite
- qt学习笔记(一) qt入门
- Qt学习(四)VS2013关联Qt
- qt学习笔记(一) qt入门
- (Qt学习1)Qt环境搭建
- QT QImage使用方法(Qt学习1)
- QT学习(五)QT 连接 sqlite
- QT学习(五)QT之多线程
- 查看IOS沙盒中文件的属性(修改日期,创建日期,大小等)
- 排序算法之直接插入排序
- 在知乎上看到的东西啦。fractional cascading
- Tiny C Compiler参考手册
- C++Primer第五版 练习12.2
- 学习Qt(10)
- hadoop使用第三方jar包
- Java设计模式----策略模式(Strategy)
- cppcheck下载及使用
- freemaker在springmvc详解2
- 【BZOJ3155】Preprefix sum
- iOS——自己实现流式布局
- 有关Material Design新特性的详解。
- Hadoop命令详解