学习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函数对过滤时间进行处理。

0 0