您的位置:首页 > 编程语言 > Qt开发

学习Qt(10)

2015-10-28 14:41 351 查看

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函数对过滤时间进行处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: