#include "FriendList.h"
#include "ui_FriendList.h"
FriendList::FriendList(QWidget *parent) :
QDialog(parent),
ui(new Ui::FriendList)
{
ui->setupUi(this);
setContextMenuPolicy(Qt::ActionsContextMenu);
this->setWindowFlag(Qt::FramelessWindowHint);
this->setStyleSheet("background-color: #729FCF");
chatRoom = new ChatRoom;
connect(chatRoom,SIGNAL(sendMsgToFrdList(QString,QString)),
this,SLOT(rcvMsgFromChatRoom(QString,QString)));
connect(this,SIGNAL(rcvFileCompeteSignal(int)),
chatRoom,SLOT(rcvFileCompeteSlot(int)));
QMenu *optionMenu=new QMenu();
QAction *OnlineAction=new QAction("重新上线");
OnlineAction->setIcon(QIcon(":/Img/picture/Online.jpeg"));
optionMenu->addAction(OnlineAction);
QAction *OfflineAction=new QAction("离线");
OfflineAction->setIcon(QIcon(":/Img/picture/OffLine.jpg"));
optionMenu->addAction(OfflineAction);
QAction *personInfoAction=new QAction("查看个人信息");
optionMenu->addAction(personInfoAction);
connect(personInfoAction,SIGNAL(triggered()),this,SLOT(showPersonInfo()));
QAction *changePswdAction=new QAction("修改密码");
optionMenu->addAction(changePswdAction);
QAction *manageFrdGroupAction=new QAction("管理好友分组");
optionMenu->addAction(manageFrdGroupAction);
QAction *exitAction=new QAction("退出");
exitAction->setIcon(QIcon(":/Img/picture/exit.jpg"));
optionMenu->addAction(exitAction);
ui->optionBtn->setPopupMode(QToolButton::InstantPopup );
ui->optionBtn->setMenu(optionMenu);
//修改相对路径为exe目录路径
QDir dir;
QDir::setCurrent(QCoreApplication::applicationDirPath());
QAction *searchAction = new QAction(ui->searchLineEdit);
searchAction->setIcon(QIcon("./picture/search1.jpg"));
ui->searchLineEdit->setPlaceholderText(tr("搜索联系人"));
ui->searchLineEdit->addAction(searchAction,QLineEdit::LeadingPosition);
ui->searchLineEdit->setStyleSheet("background-color: white");
connect(ui->chatBtn,SIGNAL(clicked()),this,SLOT(slotChatBtnClicked()));
connect(ui->contactsBtn,SIGNAL(clicked()),this,SLOT(slotContBtnClicked()));
connect(ui->groupBtn,SIGNAL(clicked()),this,SLOT(slotGroupBtnClicked()));
frdTreeWdgt=new QTreeWidget;
frdTreeWdgt->setIndentation(7);
frdTreeWdgt->setContextMenuPolicy(Qt::CustomContextMenu);
m_ContextMenu = new QMenu;
QAction *m_moveAction = new QAction("移动分组", this);
connect(m_moveAction,SIGNAL(triggered()),this,SLOT(showMoveFrdSlot()));
QAction *m_delAction = new QAction("删除好友", this);
connect(m_delAction,SIGNAL(triggered()),this,SLOT(showDeleteFrdSlot()));
m_ContextMenu->addAction(m_moveAction);
m_ContextMenu->addAction(m_delAction);
//和该策略对应的信号,showListWidgetMenuSlot为自己定义的槽函数.
connect(frdTreeWdgt, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(showTreeWidgetMenuSlot(QPoint)));
chatListWidget=new QListWidget;
groupListWidget=new QListWidget;
ui->stackWidget->setStyleSheet("background-color: white");
QHBoxLayout *contactLayout=new QHBoxLayout;
contactLayout->addWidget(frdTreeWdgt);
contactsWidget->setLayout(contactLayout);
QHBoxLayout *chatLayout=new QHBoxLayout;
chatLayout->addWidget(chatListWidget);
chatWidget->setLayout(chatLayout);
QHBoxLayout *groupLayout=new QHBoxLayout;
groupLayout->addWidget(groupListWidget);
groupWidget->setLayout(groupLayout);
ui->stackWidget->addWidget(contactsWidget);
ui->stackWidget->addWidget(chatWidget);
ui->stackWidget->addWidget(groupWidget);
connect(frdTreeWdgt,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
this,SLOT(showChatRoom(QTreeWidgetItem*,int)));
connect(chatListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
this,SLOT(showChatRoom(QListWidgetItem*)));
connect(groupListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
this,SLOT(showGroupChatRoom(QListWidgetItem*)));
ui->addFrdBtn->setIcon(QIcon(":/Img/picture/AddFriend.jpg"));
ui->addGroupBtn->setIcon(QIcon(":/Img/picture/add.jpg"));
ui->colorThemeBtn->setIcon(QIcon(":/Img/picture/theme.jpg"));
ui->ImgThemeBtn->setIcon(QIcon(":/Img/picture/ImgTheme.jpg"));
ui->chatBtn->setStyleSheet("background-color: white");
ui->groupBtn->setStyleSheet("background-color: white");;
ui->contactsBtn->setStyleSheet("background-color: white");
ui->addFrdBtn->setStyleSheet("background-color: white");
ui->addGroupBtn->setStyleSheet("background-color: white");;
ui->colorThemeBtn->setStyleSheet("background-color: white");
ui->ImgThemeBtn->setStyleSheet("background-color: white");
connect(ui->addFrdBtn,SIGNAL(clicked()),this,SLOT(showAddFrdBtn()));
connect(ui->addGroupBtn,SIGNAL(clicked()),this,SLOT(showAddGroupBtn()));
connect(ui->colorThemeBtn,SIGNAL(clicked()),this,SLOT(showColorThemeBtn()));
connect(ui->ImgThemeBtn,SIGNAL(clicked()),this,SLOT(showImgThemeBtn()));
m_udpSocket=new QUdpSocket;
if(QSqlDatabase::contains("qt_sql_default_connection")) {
database = QSqlDatabase::database("qt_sql_default_connection");
}else {
database = QSqlDatabase::addDatabase("QSQLITE");
}
QString dataPath = QDir::currentPath() + "/" + userId +"/" + userId + ".db";
database.setDatabaseName(dataPath);
if(!database.open()) {
qDebug() << "Open person database failed";
}
sqlQuery=new QSqlQuery;
}
void FriendList::mouseMoveEvent(QMouseEvent *event)
{
QPoint EndPos;
if ( event->buttons() == Qt::LeftButton )
{
EndPos = event->globalPos() - StartPos;
this->move(EndPos);
}
}
void FriendList::mousePressEvent(QMouseEvent *event)
{
if(event->buttons() == Qt::LeftButton) {
//记录窗口此时的坐标
StartPos = event->globalPos() - this->frameGeometry().topLeft();
}
}
//接收服务器发来的个人信息
void FriendList::rcvPersonInfo(QString nickName, QString signature,QString age,
QString sex, QString email,QImage headImg,QStringList frdGroupList)
{
ui->nickNameLabel->setText(nickName);
ui->signatureLabel->setText(signature);
userHeadImg=headImg;
QPixmap pixmap(60,60);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
QPainterPath path;
path.addEllipse(0, 0, 60, 60);
painter.setClipPath(path);
painter.drawPixmap(0, 0, 60, 60,QPixmap::fromImage(headImg));
ui->headImgLabel->setPixmap(pixmap);
this->sex=sex;
this->age=age;
this->email=email;
this->frdGroupList=frdGroupList;
initFrdGroupList();
personInfo=new PersonInfo;
personInfo->rcvPersonInfo(userId,nickName,signature,age,sex,email);
if(!m_udpSocket->bind(QHostAddress("192.168.2.131"),clientPort,QAbstractSocket::ShareAddress)){
qDebug()<<"Udp socket bind failed!"<<m_udpSocket->errorString()<<endl;
}
connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(udpReadyRead()),Qt::DirectConnection);
}
//获取IpV4地址
QString FriendList::getIp()
{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol) //我们使用IPv4地址
{
if(address.toString().contains("127.0."))
continue;
return address.toString();
}
}
return nullptr;
}
//展示个人信息
void FriendList::showPersonInfo()
{
personInfo->show();
}
//向服务器发送tcp消息
void FriendList::sendTcpMsg(QByteArray data)
{
if(m_tcpSocket->write(data) < 0){
qDebug()<<"Send Message Failed!"<<endl;
}
m_tcpSocket->flush();
}
//服务器断开连接
void FriendList::disconnectToServer()
{
ui->headImgLabel->setEnabled