📄 dialog.cpp
字号:
#include<QHostAddress>#include<QTextCodec>#include<QDateTime>#include<QMessageBox>#include <QColorDialog>#include <QPixmap>#include <QStringList>#include"dialog.h"Dialog::Dialog(QTcpSocket *tSocket, QString sourname, QWidget *parent): QDialog(parent){ for(int i = 0; i < 6; i++) pIs[i] = 1; setupUi(this); tcpSocket = tSocket; this->sourname = sourname; destname = "all"; QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF_8")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF_8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF_8")); QFontDatabase fontDB; fontComboBox->addItems(fontDB.families()); fontComboBox->setCurrentIndex(fontComboBox->findText(QApplication::font().family())); foreach(int size,fontDB.standardSizes()) comboBox->addItem(QString::number(size)); comboBox->setCurrentIndex(comboBox->findText(QString::number(QApplication::font().pointSize()))); toolButton->setCheckable(true); connect(toolButton,SIGNAL(toggled(bool)),this,SLOT(setBoldFont(bool))); toolButton_2->setCheckable(true); connect(toolButton_2,SIGNAL(toggled(bool)),input,SLOT(setFontItalic(bool))); toolButton_3->setCheckable(true); connect(toolButton_3,SIGNAL(toggled(bool)),input,SLOT(setFontUnderline(bool))); connect(toolButton_4,SIGNAL(clicked()),this,SLOT(setFontColor())); connect(fontComboBox,SIGNAL(activated(const QString &)), input,SLOT(setFontFamily(const QString &))); connect(comboBox,SIGNAL(activated(const QString &)), this,SLOT(setFontSize(const QString &))); connect(closeButton,SIGNAL(clicked()),this,SLOT(dClose())); connect(enterButton, SIGNAL(clicked()), this, SLOT(sendMsg())); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(recvMsg())); connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error())); connect(listView, SIGNAL(doubleClicked( const QModelIndex &)), this, SLOT(creatP( const QModelIndex &))); connect(messageButton,SIGNAL(clicked()),this,SLOT(messagerecord())); recvMsg();}void Dialog::push(const QStringList &leaders){ model = new QStringListModel(this); model->setStringList(leaders); listView->setModel(model);}void Dialog::sendMsg(){ QTextStream out(tcpSocket); QString sendMessage, inputMessage; QDateTime dateTime = QDateTime::currentDateTime(); QString time = dateTime.toString("hh:mm:ss"); inputMessage = input->toHtml(); inputMessage.replace(QString("&"), QString("-")); inputMessage.replace(QString("@"), QString("-")); if(inputMessage.length() > 1200){ QMessageBox::critical(this, "INPUT WARNING!", "文本过大,不予发送!"); return; } sendMessage = "message&" + destname + "&" + sourname + "&" + time + "&" + inputMessage + '@' + '\n'; out<<sendMessage; input->clear();}void Dialog::recvMsg(){ QStringList list, pushlist; int i = 0; QString responseLine; do{ responseLine += tcpSocket->readLine(); }while(tcpSocket->canReadLine()); list = responseLine.split(QRegExp("@")); QStringList listArry[list.size()]; while(i<list.size()){ listArry[i] = list[i].split(QRegExp("&")); if(listArry[i][0] == "Push") { int j = 1; while(j<listArry[i].size()) pushlist += listArry[i][j++]; push(pushlist); } else if(listArry[i][0]=="message") { if(listArry[i][1] != "all"){ privateConversation(listArry[i]); return; } else { responseLine = listArry[i][2] + " " + listArry[i][3] + ":\n" + listArry[i][4] + "\n"; msgBuffer += responseLine; display->setHtml(msgBuffer); display->moveCursor(QTextCursor::End); message_record =display->toPlainText(); QFile file("messagerecord.txt"); file.open(QFile::WriteOnly | QFile::Append); QTextStream out(&file); out<<message_record<<endl; message_record.clear(); file.close(); } } i++; }}void Dialog::privateConversation(QStringList message){ int i = 0, j; QString dname; QString displayMessage = message[2] + " " + message[3] + ":\n" + message[4] +"\n"; if(sourname == message[1]) dname = message[2]; else dname = message[1]; for(; i < 6; i++) { setP(); if(pIs[i] == 0) { if(pDialog[i].getDestname() == dname) { pDialog[i].setDisplay(displayMessage); return; } } } if(i == 6) { j = initP(dname); if(j == -1) { msgBuffer += displayMessage; display->setHtml(msgBuffer); display->moveCursor(QTextCursor::End); return; } pDialog[j].setDisplay(displayMessage); }}void Dialog::creatP(const QModelIndex & tream){ QString destname = (model->data(tream, 2)).toString(); initP(destname);}int Dialog::initP(QString destname){ int i ; i = this->getP(); if( i == -1) { QMessageBox::critical(this, "privateconversation", "private conversation person num > 6, message display in group conversation"); return -1; } pDialog[i].init(this->tcpSocket, this->sourname, destname); return i;}void Dialog::dClose(){ tcpSocket->close(); for(int i = 0; i < 6; i++) { setP(); if(pIs[i] == 0) pDialog[i].close(); } close();}void Dialog::error(){ QMessageBox::critical(this, "socket error", tcpSocket->errorString()); tcpSocket->close();}void Dialog::setFontSize(const QString &size){ input->setFontPointSize(size.toFloat());}void Dialog::setBoldFont(bool flag){ if(flag == true) { input->setFontWeight(QFont::Bold); } else input->setFontWeight(QFont::Normal);}void Dialog::setFontColor(){ QColor col = QColorDialog::getColor(input->textColor(),this); if(!col.isValid()) { return ; } input->setTextColor(col); QPixmap pix(16,16); pix.fill(col); toolButton_4->setIcon(pix);}void Dialog::messagerecord(){ QFile file("messagerecord.txt"); file.open(QFile::ReadOnly); QByteArray msg = file.readAll(); QString record = QString::fromLocal8Bit(msg); myrecord.recordBrowser->setText(record); myrecord.show();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -