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

📄 inputtextwgt.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 "inputtextwgt.h"#include <QFile>#include <QByteArray>#include <QTextCursor>#include <QTextFrame>#include <stdlib.h>#include <assert.h>#include "qchatsettings.h"static QString Chars_US("");static QString Chars_UA("");static QString Chars_RU("");static bool inited = false;InputTextWgt::InputTextWgt(QWidget *parent) : QTextEdit(parent),  m_currentMsg      (""),  m_msgHistory      (NULL),  m_msgsSize        (0),  m_currentMsgNumber(1),  m_current         (0){}//\*****************************************************************************void InputTextWgt::initChars(const QString & filename){  QByteArray ba;  QFile file(filename);  if(!::inited && file.open(QIODevice::ReadOnly))  {    ba         = file.readLine();    ::Chars_US = QString::fromUtf8(ba.data(), ba.size());    ba         = file.readLine();    ::Chars_RU = QString::fromUtf8(ba.data(), ba.size());    ba         = file.readLine();    ::Chars_UA = QString::fromUtf8(ba.data(), ba.size());  }  ::inited = true;}//\*****************************************************************************void InputTextWgt::changeTextCharMap() // TODO rewrite{  QString str    = toPlainText();  QTextCursor tc = textCursor();  int i;  QString original;  QString replace;  switch(m_current)  {    case 0 :      original  = ::Chars_US;      if(!::Chars_UA.isEmpty()){        replace   = ::Chars_UA;        m_current = 1;      }      else if(!::Chars_RU.isEmpty()){        replace   = ::Chars_RU;        m_current = 2;      }      else        m_current = -1;      break;    case 1 :      original  = ::Chars_UA;      if(!::Chars_RU.isEmpty()){        replace   = ::Chars_RU;        m_current = 2;      }      else if(!::Chars_US.isEmpty()){        replace   = ::Chars_US;        m_current = 0;      }      else        m_current = -1;      break;    case 2 :      original  = ::Chars_RU;      if(!::Chars_US.isEmpty()){        replace   = ::Chars_US;        m_current = 0;      }      else if(!::Chars_UA.isEmpty()){        replace   = ::Chars_UA;        m_current = 1;      }      else        m_current = -1;      break;  }  if(m_current < 0)    return;  for(i = 0; i < str.size(); i++)    if(original.contains(str[i]))      str[i] = replace[original.indexOf(str[i])];  setPlainText(str);  setTextCursor(tc);}//\*****************************************************************************void InputTextWgt::keyPressEvent(QKeyEvent* ev){  QKeySequence seq = ev->key() + ev->modifiers();  if(QChatSettings::settings()->shortcuts("SendMessage").contains(seq))    sendMsg();  // FIXME shortcuts("SendMessage") can contain QKeySequence("Ctrl+Return") also  else if(QChatSettings::settings()->shortcuts("SendMessage").contains(QKeySequence("Return")) &&          QKeySequence("Ctrl+Return") == seq)    insertPlainText("\n");  else if(QChatSettings::settings()->shortcuts("ChangeTextCharMap").contains(seq))    changeTextCharMap();  else if(QChatSettings::settings()->shortcuts("NextMessage").contains(seq))    nextMsg();  else if(QChatSettings::settings()->shortcuts("PrevMessage").contains(seq))    prevMsg();  else if((ev->key()  == Qt::Key_Tab))    QWidget::keyPressEvent(ev);  else    QTextEdit::keyPressEvent(ev);}//\*****************************************************************************void InputTextWgt::nextMsg(){  if(m_currentMsgNumber + 1 >= 0 && m_currentMsgNumber + 1 < m_msgsSize)  {    m_currentMsgNumber++;    setHtml(*m_msgHistory[m_currentMsgNumber]);  }  else if(m_currentMsgNumber + 1 == m_msgsSize)  {    m_currentMsgNumber++;    setHtml(m_currentMsg);  }}//\*****************************************************************************void InputTextWgt::prevMsg   (){  if(m_currentMsgNumber == m_msgsSize)    m_currentMsg = toHtml();  if(m_currentMsgNumber - 1 >= 0 && m_currentMsgNumber - 1 < m_msgsSize)  {    m_currentMsgNumber--;    setHtml(*m_msgHistory[m_currentMsgNumber]);  }}//\*****************************************************************************void InputTextWgt::addMsg(const QString & msg){  quint16 i;  if(msg.isEmpty())    return;  if(m_msgHistory != NULL)    for(i = 0; i < m_msgsSize; i++)      if(*m_msgHistory[i] == msg)      {        *m_msgHistory[i]              = *m_msgHistory[m_msgsSize - 1];        *m_msgHistory[m_msgsSize - 1] = msg;        return;      }  ++m_msgsSize;  m_msgHistory = (QString**)realloc(m_msgHistory, m_msgsSize * sizeof(QString*));  assert(NULL != m_msgHistory);  m_msgHistory[m_msgsSize - 1] = new QString(msg);}//\*****************************************************************************void InputTextWgt::sendMsg(){//   addMsg(toPlainText());  addMsg(toHtml());  m_currentMsgNumber = m_msgsSize;  emit wantSend();}

⌨️ 快捷键说明

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