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

📄 dialog.cpp

📁 局域网聊天室
💻 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 + -