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

📄 qchat.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 "qchat.h"#include <QSplashScreen>#include <QTime>#include "chatcore.h"#include "chatwgt.h"#include "qchateventfilter.h"#include "qchaticon.h"#include "qchatsettings.h"QChat::QChat(QObject *parent) : QObject(parent),  m_chat(NULL),  m_core(NULL){}QChat::~QChat(){  qDebug("[QChat::~QChat]\n");  m_core->saveSettings(true);  delete m_chat;  delete m_core;}void QChat::start(int argc, char *argv[], QApplication* app){//   QSplashScreen *splash = new QSplashScreen(QPixmap(":/images/splash.png"));//   splash->show();  QTime t, tt;  QChatEventFilter* eventFilter;  QChatSettings::initGeneralOptions();  t.start();  tt.start();  m_app = app;  // Processing command line arguments  // *********************************  CmdArgs* args = processCmdArgs(argc, argv);  if(!args->unknown_option.isEmpty())  {    unknownOptionMessage(args->unknown_option);    delete args;    delete m_core;    exit(1);  }  if(args->show_version)  {    printf("%s\n", Globals::VersionStr.toLocal8Bit().data());    delete args;    delete m_core;    exit(0);  }  if(args->show_help)  {    helpMessage();    delete args;    delete m_core;    exit(0);  }  if(args->show_author)  {    authorMessage();    delete args;    delete m_core;    exit(0);  }  app->setQuitOnLastWindowClosed(false);  m_core = new ChatCore;  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Loading settings...]\n");//   splash->showMessage(tr("Loading settings..."), Qt::AlignBottom | Qt::AlignCenter, Qt::red);  QChatSettings::setLoggingDir(args->chat_log_dir);  m_core->initSettings(args->settings_dir);  m_core->slot_loadSettings();  if(args->port_in > 0)    QChatSettings::settings()->setOption("InputPort", (args->port_in));  if(args->port_out > 0)    QChatSettings::settings()->setOption("OutputPort", args->port_out);  delete args;  // *********************************  QChatIcon::initIcons();  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Creating Main Window...]\n");//   splash->showMessage(tr("Creating Main Window..."), Qt::AlignBottom | Qt::AlignCenter, Qt::red);  m_chat = new ChatWgt(m_core);  m_chat->setCursor(QCursor(Qt::WaitCursor));  m_core->setChatWgt(m_chat);  m_chat->fillProfilesCmbx(m_core->profiles(), m_core->currentProfile());  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Starting threads...]\n");//   splash->showMessage(QObject::tr("Starting threads..."), Qt::AlignBottom | Qt::AlignCenter, Qt::red);  m_core->startThreads();  connect(m_chat, SIGNAL(     singleMessageOut  (QString, quint64, bool)),          m_core, SLOT  (slot_singleMessage     (QString, quint64, bool)));  connect(m_core, SIGNAL(     singleMessageIn   (SingleMessage*, bool)),          m_chat, SLOT  (slot_singleMessageIn   (SingleMessage*, bool)));  connect(m_core, SIGNAL(     privateChatRequest(QString, quint64)),          m_chat, SLOT  (slot_privateChat       (QString, quint64)));  connect(m_core, SIGNAL(chatDataReceived(QC_DatagramHeader*)),          m_chat, SLOT  (slot_processData(QC_DatagramHeader*)));  connect((QObject*)m_core->tcpReceiver(), SIGNAL(wantReceiveFile (QString, quint16, quint64)),          m_chat            , SLOT  (slot_receiveFile(QString, quint16, quint64)));  connect((QObject*)m_core->udpReceiver(), SIGNAL(wantReceiveFile (QString, quint16, quint64)),          m_chat            , SLOT  (slot_receiveFile(QString, quint16, quint64)));  connect(app   , SIGNAL(focusChanged(QWidget*, QWidget*)),          m_chat, SLOT  (slot_focusChanged(QWidget*, QWidget*)));  connect(m_chat, SIGNAL(closed()),          app   , SLOT  (quit()));  connect(m_chat, SIGNAL(wantChangeStyleSheet(QString)), this, SLOT(setStyleSheet(QString)));  m_core->initPlugins();  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Creating channel 'Main'...]\n");//   splash->showMessage(QObject::tr("Creating channel 'Main'..."), Qt::AlignBottom | Qt::AlignCenter, Qt::red);  m_chat->slot_addChannell("Main");  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Restoring Window Geometry...]\n");//   splash->showMessage(tr("Restoring Window Geometry..."), Qt::AlignBottom | Qt::AlignCenter, Qt::red);  m_chat->restoreAndShow();  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Finishin initialization]\n");//   splash->showMessage(tr("Ready to Chat :)"), Qt::AlignBottom | Qt::AlignCenter, Qt::red);//   splash->finish(m_chat);  m_chat->setCursor(QCursor(Qt::ArrowCursor));  eventFilter = new QChatEventFilter(this);  app->installEventFilter(eventFilter);  eventFilter->setChatWgt(m_chat);  AbstractChatCore::setProtocolVersion(QChatSettings::settings()->intOption("ProtocolVersion"));  connect(eventFilter, SIGNAL(wantHide2Tray()), this, SLOT(hide2tray()));  qDebug("Time elapsed: %d ms", t.restart());  qDebug("QChat: [Ready to Chat :)]\n");  qDebug("Starting Time: %d ms", tt.elapsed());}void QChat::reloadStyleSheet(){  m_app->setStyleSheet(m_styleSheet);}void QChat::setStyleSheet(const QString & filename){  QFile file(filename);  QByteArray ba;  file.open(QFile::ReadOnly | QFile::Unbuffered);  // etogo bolee chem dostatochno, i v sluchae esli budet vybran ochen' bol'shoi fail  // ne budet popytki zagruzit' ego tselikom v pamyat'  if(file.size() < 1024 * 1024)    ba = file.readAll();  file.close();  m_styleSheet = QString().fromUtf8(ba);  m_app->setStyleSheet(m_styleSheet);}void QChat::hide2tray(){  QWidget* wgt = QApplication::activeWindow();  if(wgt)    wgt->close();}void QChat::unknownOptionMessage(const QString& msg){  printf("%s\n", tr("Unknown option: %1\nUse -h for list of available options.").arg(msg).toLocal8Bit().data());}void QChat::helpMessage(){  QString msg;  msg = tr  (  "  List of available options:\n"  "    -h, --help               Prints this message\n"  "    -v, --version            Prints version of QChat\n"  "        --author             Information about author\n"  "        --settingsdir <dir>  Directory with settings\n"  "        --logdir      <dir>  Directory for saving chat logs\n"  );  printf("%s\n", msg.toLocal8Bit().data());}void QChat::welcomeMessage(){  printf("%s\n", tr("QChat %1 - Network chat").arg(Globals::VersionStr).toLocal8Bit().data());}void QChat::authorMessage(){  welcomeMessage();  printf("%s\n", tr("Author: Ower <ower@users.sourceforge.net>").toLocal8Bit().data());}CmdArgs* QChat::processCmdArgs(int argc, char* argv[]){  int i;  CmdArgs* args = new CmdArgs;  for(i = 1; i < argc; i++)  {    if(!strcmp("--logdir", argv[i])){      if(++i < argc)        args->chat_log_dir = QString().fromLocal8Bit(argv[i]);}    else if(!strcmp("--settingsdir", argv[i])){      if(++i < argc)        args->settings_dir = QString().fromLocal8Bit(argv[i]);}    else if(!strcmp("--iport", argv[i])){      if(++i < argc)        args->port_in = atoi(argv[i]);}    else if(!strcmp("--oport", argv[i])){      if(++i < argc)        args->port_out = atoi(argv[i]);}    else if(!strcmp("-h", argv[i]) || !strcmp("--help", argv[i]))      args->show_help = true;    else if(!strcmp("-v", argv[i]) || !strcmp("--version", argv[i]))      args->show_version = true;    else if(!strcmp("--author", argv[i]))      args->show_author = true;    else    {      args->unknown_option = argv[i];      break;    }  }  return args;}

⌨️ 快捷键说明

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