⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filetransferwgt.cpp

📁 用qt4 编写的局域网聊天工具
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2007 by Anistratov Oleg                                 * *   ower@users.sourceforge.net                                            * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License version 2        * *   as published by the Free Software Foundation;                         * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * ***************************************************************************/#include "filetransferwgt.h"#include <QFileDialog>FileTransferWgt::FileTransferWgt(const QString & filename_, bool receiving_, QWidget *parent) : QWidget(parent),  m_id       (0),  m_uid      (0),  m_ip       (0),  m_filename (filename_),  m_finished (false),  m_receiving(receiving_),  m_accepted (false){}//\*****************************************************************************FileTransferWgt::~FileTransferWgt(){  qDebug("[~FileTransferWgt]");}//\*****************************************************************************void FileTransferWgt::retranslate(){  m_cancelBtn     ->setText(tr("&Cancel"));  m_acceptBtn     ->setText(tr("&Accept"));  m_rejectBtn     ->setText(tr("&Reject"));  m_autoCloseChbx ->setText(tr("Auto close when complete"));  if(!m_receiving) setWindowTitle(QString(tr("Sending "  )) + m_filename);  else             setWindowTitle(QString(tr("Receiving ")) + m_filename);}//\*****************************************************************************void FileTransferWgt::slot_accept(){  qDebug("[FileTransferWgt::slot_accept]");  QString filename = QFileDialog::getSaveFileName(                    this,                    tr("Choose a file to save"),                    QString("/") + m_filename,                    "");  if(filename.isEmpty())    return;  m_filenameLab->setText(tr("Receiving: %1\nSender: %2(%3)").arg(filename).arg(m_userName).arg(QHostAddress(m_ip).toString()));  m_filename = filename;  m_grid     ->removeWidget(m_acceptBtn);  m_grid     ->removeWidget(m_rejectBtn);  m_acceptBtn->hide();  m_rejectBtn->hide();  m_grid     ->addWidget(m_autoCloseChbx, 2, 0, 1, 2);  m_grid     ->addWidget(m_cancelBtn    , 3, 0, 1, 2);  m_autoCloseChbx->show();  m_cancelBtn    ->show();  m_accepted = true;  emit accepted(m_filename, m_id, m_uid);}//\*****************************************************************************void FileTransferWgt::slot_reject(){  qDebug("[FileTransferWgt::slot_reject] ip = %lu", (unsigned long) m_uid);  if(!m_receiving)  {    emit rejected(m_id, m_uid, 2);    emit cancel  (m_id);  }  if(!m_finished)    emit rejected(m_id, m_uid, m_accepted);  slot_selfDestroy();}//\*****************************************************************************void FileTransferWgt::slot_selfDestroy(){  hide();  this->~FileTransferWgt();}//\*****************************************************************************void FileTransferWgt::slot_setProgress(quint8 progress, quint16 id, quint64 uid){  if(!m_finished && m_id == id && (!m_receiving || uid == m_uid))  {    m_progress->setValue(100 - progress);    if(progress == 0)    {      m_finished = true;      if(m_autoCloseChbx->checkState() == Qt::Checked)        slot_selfDestroy();      else      {        m_progress->setFormat(tr("Completed (%p%)"));        m_progress->repaint();        m_cancelBtn->setText(tr("Close"));      }    }  }}//\*****************************************************************************void FileTransferWgt::slot_cancelledByReceiver(quint16 id){  if(!m_finished && id == m_id)  {    m_progress->setFormat(tr("Failed: cancelled by receiver(%p%)"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::slot_cancelledBySender(quint16 id, quint64 ip){  if(!m_finished && id == m_id && ip == m_uid && !m_finished)  {    m_progress->setFormat(tr("Failed: cancelled by sender (%p%)"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::slot_cannotSend(quint16 id){  if(!m_finished && id == m_id)  {    m_progress->setFormat(tr("Failed: cannot send file"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::slot_rejectedByReceiver (quint16 id){  if(!m_finished && id == m_id)  {    m_progress->setFormat(tr("Failed: rejected by receiver"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::slot_receivingTimeout(quint16 id, quint64 ip){  if(!m_finished && id == m_id && ip == m_uid)  {    m_progress->setFormat(tr("Failed: receiving timeout (%p%)"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::slot_sendingTimeout(quint16 id){  if(!m_finished && id == m_id)  {    m_progress->setFormat(tr("Possibly failed: sending finished but only %p% confirmed"));    m_progress->repaint();    m_finished = true;  }}//\*****************************************************************************void FileTransferWgt::init(){  m_grid          = new QGridLayout (this);  m_cancelBtn     = new QPushButton (this);  m_acceptBtn     = new QPushButton (this);  m_rejectBtn     = new QPushButton (this);  m_progress      = new QProgressBar(this);  m_autoCloseChbx = new QCheckBox   (this);  m_filenameLab   = new QLabel      (m_filename, this);  if(!m_receiving)  {    m_grid->addWidget(m_filenameLab         , 0, 0, 1, 2);    m_grid->addWidget(m_progress            , 1, 0, 1, 2);    m_grid->addWidget(m_autoCloseChbx       , 2, 0, 1, 2);    m_grid->addWidget(m_cancelBtn           , 3, 0, 1, 2);    m_acceptBtn->hide();    m_rejectBtn->hide();    m_filenameLab->setText(tr("Sending: %1\nReceiver: %2(%3)").arg(m_filename).arg(m_userName).arg(QHostAddress(m_ip).toString()));  }  else  {    m_grid->addWidget(m_filenameLab         , 0, 0, 1, 2);    m_grid->addWidget(m_progress            , 1, 0, 1, 2);    m_grid->addWidget(m_acceptBtn           , 2, 0);    m_grid->addWidget(m_rejectBtn           , 2, 1);    m_cancelBtn    ->hide();    m_autoCloseChbx->hide();    m_filenameLab->setText(tr("Receiving: %1\nSender: %2(%3)").arg(m_filename).arg(m_userName).arg(QHostAddress(m_ip).toString()));  }  m_progress->setMinimumHeight(25);  setMinimumWidth (300);  m_progress->setTextVisible(true);  m_progress->setValue(0);  connect(m_cancelBtn, SIGNAL(clicked()), this, SLOT(slot_reject     ()));  connect(m_acceptBtn, SIGNAL(clicked()), this, SLOT(slot_accept     ()));  connect(m_rejectBtn, SIGNAL(clicked()), this, SLOT(slot_reject     ()));  retranslate();  show();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -