/*-------------------------------------
多文件传输pc上搞定,接着搞android上的多文件接收
已存档到e:/copy.
---------------------------------------*/
#define TCP_PORT 23333
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPixmap>
#include <QPalette>
#include <QLabel>
#include <QFileDialog>
#include <QFont>
#include "ipreceiver.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
currentPath = readTextFile();
loadSize = 1*1024;
totalBytes =0;
bytesWritten =0;
bytesToWrite= 0;
currentItem =0;
RecTotalBytes = 0;
bytesReceived = 0;
fileNameSize = 0;
serverSocket = new QTcpSocket(this);
initUi();
ipReceiver = new IpReceiver(this);
connect(ipReceiver,SIGNAL(ipGot(QString)),this,SLOT(tcpConnectToHost()));
connection();
}
Widget::~Widget()
{
delete ui;
}
void Widget::initUi()
{
// QPalette palette;
// QPixmap pixmap(":/background.jpg");
// palette.setBrush(backgroundRole(), QBrush(pixmap));
// this->setPalette(palette);
// this->setAutoFillBackground(true);
sendItem = new QListWidgetItem;
sendItem->setIcon(QIcon(":/send.png"));
receiveItem = new QListWidgetItem;
receiveItem->setIcon(QIcon(":/receive.png"));
listWidget = new QListWidget;
// listWidget->setStyleSheet("background:transparent");
listWidget->setMinimumSize(130,400);
listWidget->setIconSize(QSize(120,120));
listWidget->setViewMode(QListView::IconMode);
listWidget->addItem(sendItem);
listWidget->addItem(receiveItem);
listWidget->setMovement(QListView::Static);
sendList = new QListWidget;
sendList->setViewMode(QListView::ListMode);
sendList->setIconSize(QSize(20,20));
sendList->setMinimumSize(600,320);
receiveList = new QListWidget;
receiveList->setViewMode(QListView::ListMode);
receiveList->setIconSize(QSize(20,20));
receiveList->setMinimumSize(600,320);
tableWidget = new QStackedWidget;
tableWidget->setMinimumSize(600,320);
tableWidget->setFrameShape(QFrame::Panel);
tableWidget->setFrameShadow(QFrame::Sunken);
tableWidget->setLineWidth(1);
tableWidget->setMidLineWidth(0);
tableWidget->addWidget(sendList);
tableWidget->addWidget(receiveList);
bar = new QProgressBar;
bar->setFormat("%p%");
bar->setValue(0);
tipsLab = new QLabel;
tipsLab->setMinimumSize(200,20);
tipsLab->setMaximumSize(600,20);
tipsLab->setText("当前保存目录:"+currentPath);
//发送时清空按钮布局
clearBtn = new QPushButton;
clearBtn->setMinimumSize(70,25);
clearBtn->setMaximumSize(70,25);
clearBtn->setText(tr("清 空"));
QHBoxLayout *clearBtnLay = new QHBoxLayout;
clearBtnLay->addStretch();
clearBtnLay->addWidget(clearBtn);
//发送时按钮布局
openBtn = new QPushButton;
openBtn->setMinimumSize(70,25);
openBtn->setMaximumSize(70,25);
openBtn->setText(tr("打开文件"));
sendBtn = new QPushButton;
sendBtn->setMinimumSize(70,25);
sendBtn->setMaximumSize(70,25);
sendBtn->setText(tr("发送"));
sendBtn->setEnabled(false);
QHBoxLayout *btnLayout = new QHBoxLayout;
btnLayout->addStretch();
btnLayout->addWidget(openBtn);
btnLayout->addWidget(sendBtn);
sendBtnPage = new QWidget;
sendBtnPage->setLayout(btnLayout);
//接收时按钮布局
setPathBtn = new QPushButton;
setPathBtn->setMinimumSize(80,25);
setPathBtn->setMaximumSize(80,25);
setPathBtn->setText(tr("设置保存目录"));
QHBoxLayout *pathBtnLayout = new QHBoxLayout;
pathBtnLayout->addStretch();
pathBtnLayout->addWidget(setPathBtn);
receiveBtnPage = new QWidget;
receiveBtnPage->setLayout(pathBtnLayout);
//按钮stackedwidget
btnWidget = new QStackedWidget;
btnWidget->setMinimumSize(600,40);
btnWidget->addWidget(sendBtnPage);
btnWidget->addWidget(receiveBtnPage);
QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(tableWidget);
rightLayout->addLayout(clearBtnLay);
rightLayout->addWidget(bar);
rightLayout->addWidget(tipsLab);
rightLayout->addWidget(btnWidget);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(listWidget);
mainLayout->addLayout(rightLayout);
this->setLayout(mainLayout);
}
void Widget::connection()
{
connect(listWidget,SIGNAL(currentRowChanged(int)),btnWidget,SLOT(setCurrentIndex(int)));
connect(listWidget,SIGNAL(currentRowChanged(int)),tableWidget,SLOT(setCurrentIndex(int)));
connect(openBtn,SIGNAL(clicked()),this,SLOT(openFile()));
connect(sendBtn,SIGNAL(clicked()),this,SLOT(startTransfer()));
connect(clearBtn,SIGNAL(clicked()),this,SLOT(on_clearBtn_clicked()));
connect(sendList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(deleteItem(QListWidgetItem*)));
connect(setPathBtn,SIGNAL(clicked()),this,SLOT(setPath()));
connect(serverSocket,SIGNAL(readyRead()),this,SLOT(receiveFile()));
connect(serverSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
}
void Widget::tcpConnectToHost()
{
serverSocket->abort();
serverSocket->connectToHost(ipReceiver->getIp(),TCP_PORT);
ipReceiver->abort();
qDebug()<<ipReceiver->getIp()<<TCP_PORT;
connect(serverSocket,SIGNAL(connected()),this,SLOT(acceptConnection()));
}
void Widget::acceptConnection()
{
bytesWritten =0;
tipsLab->setText(tr("连接成功!可以开始操作。"));
sendBtn->setEnabled(true);
connect(serverSocket,SIGNAL(bytesWritten(qint64)),this,SLOT(updateServerProcess(qint64)));
}
void Widget::openFile()
{
fileNames = QFileDialog::getOpenFileNames(this);
for (int i = 0; i < fileNames.size(); ++i)
{
QString currentFileName = fileNames.at(i).toLocal8Bit().constData();
QListWidgetItem *item = new QListWidgetItem;
item->setText(currentFileName);
QString fileType = currentFileName.right(currentFileName.size() - currentFileName.lastIndexOf('.')-1);
if(fileType == "png" || fileType == "jpg" || fileType == "jpeg" || fileType == "gif")
{
item->setIcon(QIcon(":/photo.png"));
}
else if(fileType == "mp3" || fileType == "wma")
{
item->setIcon(QIcon(":/music.png"));
}
else if(fileType == "mp4" || fileType == "avi" || fileType == "3gp" || fileType == "rm"|| fileType == "rmvb"|| fileType == "wmv")
{
item->setIcon(QIcon(":/movie.png"));
}
else
{
item->setIcon(QIcon(":/text.png"));
}
sendList->addItem(item);
}
tipsLab->setText("温馨提示:双击删除选项。");
}
void Widget::deleteItem(QListWidgetItem *item)
{
delete item;
}
void Widget::startTransfer()
{
// resetSetting();
QDataStream sendOut(&outBlock,QIODevice::WriteOnly);
sendOut.setVersion(QDataStream::Qt_4_6);
if(currentItem == 0) // countting the whole size of files
{
for(int i =0;i < fileNames.size();i++)
{
QString fileName = fileNames.at(i).toLocal8Bit().constData();
//QString fileName = sendList->item(i)->text();
localFile = new QFile(fileName);
totalBytes += localFile->size();
QString currentFileName = fileName.right(fileName.size() - fileName.lastIndexOf('\\')-1);
//sendOut<<qint64(0)<<qint64(0)<<currentFileName.toUtf8();
//totalBytes +=outBlock.size();
//outBlock.resize(0);
qDebug()<<currentFileName;
tipsLab->setText(tr("开�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
WifiTransmission.zip (21个子文件)
movie.png 7KB
receive.png 3KB
background.jpg 256KB
logo.ico 66KB
logo.rc 29B
WifiTransmission.pro.user 21KB
widget.h 2KB
ipreceiver.cpp 707B
widget.ui 441B
quit.png 10KB
send.png 3KB
photo.png 10KB
WifiTransmission.pro 455B
text.png 7KB
main.cpp 505B
music.png 9KB
ipreceiver.h 425B
ipsender.cpp 982B
ipsender.h 325B
pic.qrc 279B
widget.cpp 16KB
共 21 条
- 1
资源评论
- 魏消晨2015-04-16不太适合的资源。
- 墨麟2014-06-05这是用c\c++写的
- ye07042014-06-23没有达到预期效果,不过编程思想还是可以借鉴,标题党真是坑
- 飞鸟的轨迹2014-09-02要这么多分就不是Android程序
- liucaifang6222014-05-26非android程序
普通网友
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功