提交 5933e2a1 编写于 作者: U u014427391

change log

上级 d3c937af
IDI_ICON1 ICON DISCARDABLE "dove.ico"
\ No newline at end of file
#include <QSqlQuery>
#include <QMessageBox>
#include <QSqlDatabase>
#include "chitchat.h"
#include "ui_chitchat.h"
/**
* @brief Chitchat::Chitchat
* @param nickName
* @param parent
*/
Chitchat::Chitchat(QString nickName,QWidget *parent) :
QMainWindow(parent),name(nickName),
ui(new Ui::Chitchat)
{
ui->setupUi(this);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
setWindowIcon(QIcon(":/images/dove.png"));
setWindowTitle(tr("白鸽局域网聊天器"));
//设置背景
QPalette pal;
QPixmap pixmap(":/images/background.jpg");
pal.setBrush(QPalette::Window,QBrush(pixmap));
setPalette(pal);
createAction();
createToolBar();
connect(ui->boldBtn,SIGNAL(clicked()),this,SLOT(Bold()));
connect(ui->ItalicBtn,SIGNAL(clicked()),this,SLOT(Italic()));
connect(ui->underLineBtn,SIGNAL(clicked()),this,SLOT(UnderLine()));
connect(ui->textEdit,SIGNAL(currentCharFormatChanged(QTextCharFormat)),this,SLOT(currentFormatChanged(const QTextCharFormat)));
connect(ui->closeBtn,SIGNAL(clicked()),this,SLOT(Close()));
/**
*
*设置焦点策略,即主文本框不可以聚集焦点
*/
ui->textEdit->setFocusPolicy(Qt::StrongFocus);
ui->textBrowser->setFocusPolicy(Qt::NoFocus);
ui->textEdit->setFocus();
ui->textEdit->installEventFilter(this);//设置事件滤过器
privatechat=NULL;//私聊
privatechat1=NULL;
/**
*udp通信,端口为45455
*/
udpSocket = new QUdpSocket(this);
port = 45455;
bb=0;
udpSocket->bind(port,QUdpSocket::ShareAddress
| QUdpSocket::ReuseAddressHint);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));
sendMessage(NewParticipant);
server = new TcpServer(this);
connect(server,SIGNAL(sendFileName(QString)),this,SLOT(sentFileName(QString)));
//connect(ui->textEdit,SIGNAL(currentCharFormatChanged(QTextCharFormat)),this,SLOT(currentFormatChanged(const QTextCharFormat)));
setFixedSize(926,578);
}
void Chitchat::init(){
}
/**
*动作Action
* @brief Chitchat::createAction
*/
void Chitchat::createAction(){
sendFile=new QAction(QIcon(":/images/send.png"),tr("发送文件"),this);
music=new QAction(QIcon(":/images/Music.png"),tr("音乐"),this);
save=new QAction(QIcon(":/images/save.png"),tr("保存聊天记录"),this);
clear=new QAction(QIcon(":/images/clear.png"),tr("清屏"),this);
note=new QAction(QIcon(":/images/note.png"),tr("记事本"),this);
explore=new QAction(QIcon(":/images/explore.png"),tr("浏览器"),this);
exitLogin=new QAction(QIcon(":/images/exitLogin.png"),tr("退出登录"),this);
grapWindowScreen=new QAction(QIcon(":/images/img.png"),tr("截图工具"),this);
connect(sendFile,SIGNAL(triggered()),this,SLOT(SendFile()));
connect(music,SIGNAL(triggered()),this,SLOT(showPlayer()));
connect(save,SIGNAL(triggered()),this,SLOT(Save()));
connect(clear,SIGNAL(triggered()),this,SLOT(Clear()));
connect(note,SIGNAL(triggered()),this,SLOT(showNote()));
connect(exitLogin,SIGNAL(triggered()),this,SLOT(ExitLogin()));
connect(grapWindowScreen,SIGNAL(triggered()),this,SLOT(showGrapScreenTool()));
connect(explore,SIGNAL(triggered()),this,SLOT(showExplore()));
}
/**
*工具栏
* @brief Chitchat::createToolBar
*/
void Chitchat::createToolBar(){
toolBar=addToolBar(tr("工具栏"));
toolBar->addAction(sendFile);
toolBar->addAction(music);
toolBar->addAction(save);
toolBar->addAction(clear);
toolBar->addAction(note);
toolBar->addAction(exitLogin);
toolBar->addAction(explore);
toolBar->addAction(grapWindowScreen);
}
/**
*
*接收数据UDP
* @brief Chitchat::processPendingDatagrams
*/
void Chitchat::processPendingDatagrams() //接收数据UDP
{
while(udpSocket->hasPendingDatagrams())
{
QByteArray datagram;//字节数组
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(),datagram.size());
QDataStream in(&datagram,QIODevice::ReadOnly);//数据流
int messageType;
in >> messageType;
QString userName,localHostName,ipAddress,message;
QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
switch(messageType)
{
//处理接收到的信息
case Message:
{
in >>userName >>localHostName >>ipAddress >>message;//接收对方的用户名、ip、和信息
ui->textBrowser->setTextColor(Qt::blue);
ui->textBrowser->setCurrentFont(QFont("Times New Roman",12));
ui->textBrowser->append("[ " +userName+" ] "+ time);//将对方用户名加到文本浏览器
ui->textBrowser->append(message);//将收到的消息加到文本浏览器
break;
}
//新用户加入
case NewParticipant:
{
in >>userName >>localHostName >>ipAddress;//新用户的用户名、主机名、ip
newParticipant(userName,localHostName,ipAddress);
break;
}
//用户离开
case ParticipantLeft:
{
in >>userName >>localHostName;
participantLeft(userName,localHostName,time);
break;
}
//发送文件
case FileName:
{
in >>userName >>localHostName >> ipAddress;
QString clientAddress,fileName;
in >> clientAddress >> fileName;
hasPendingFile(userName,ipAddress,clientAddress,fileName);
break;
}
//拒绝
case Refuse:
{
in >> userName >> localHostName;
QString serverAddress;
in >> serverAddress;
QString ipAddress = getIP();
if(ipAddress == serverAddress)
{
server->refused();
}
break;
}
case Xchat:
{
in >>userName >>localHostName >>ipAddress;
/****/
// showxchat(userName,ipAddress);
showxchat(localHostName,ipAddress);//显示与主机名聊天中,不是用户名
break;
}
}
}
}
/**
*处理新用户加入
* @brief Chitchat::newParticipant
* @param userName
* @param localHostName
* @param ipAddress
*/
void Chitchat::newParticipant(QString userName,QString localHostName,QString ipAddress)
{
bool bb = ui->tableWidget->findItems(localHostName,Qt::MatchExactly).isEmpty();
if(bb)
{
QTableWidgetItem *user = new QTableWidgetItem(userName);//用户名
QTableWidgetItem *host = new QTableWidgetItem(localHostName);//主机名
QTableWidgetItem *ip = new QTableWidgetItem(ipAddress);//ip
ui->tableWidget->insertRow(0);
//插入一张图片,本来是想实现用户上传自己的图片
QLabel *imgLabel=new QLabel;
imgLabel->setPixmap(QPixmap(":/images/usericon/yy.png"));
ui->tableWidget->setCellWidget(0,0,imgLabel);
ui->tableWidget->setItem(0,1,user);
ui->tableWidget->setItem(0,2,host);
ui->tableWidget->setItem(0,3,ip);
ui->textBrowser->setTextColor(Qt::gray);
ui->textBrowser->setCurrentFont(QFont("Times New Roman",10));
ui->textBrowser->append(tr("%1 在线!").arg(userName));
ui->onLineUsersNum->setText(tr("在线人数:%1").arg(ui->tableWidget->rowCount())+tr(",登录者:%1").arg(name));
sendMessage(NewParticipant);//发送信息
}
}
/**
*处理用户离开
* @brief Chitchat::participantLeft
* @param userName
* @param localHostName
* @param time
*/
void Chitchat::participantLeft(QString userName,QString localHostName,QString time)
{
int rowNum = ui->tableWidget->findItems(localHostName,Qt::MatchExactly).first()->row();
ui->tableWidget->removeRow(rowNum);
ui->textBrowser->setTextColor(Qt::gray);
ui->textBrowser->setCurrentFont(QFont("Times New Roman",10));
ui->textBrowser->append(tr("%1 于 %2 离开!").arg(userName).arg(time));
ui->onLineUsersNum->setText(tr("在线人数:%1").arg(ui->tableWidget->rowCount()));
}
/**
*改变事件
* @brief Chitchat::changeEvent
* @param e
*/
void Chitchat::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
/**
*获取ip
* @brief Chitchat::getIP
* @return
*/
QString Chitchat::getIP() //获取ip地址
{
//获取所有ip,放到列表里
QList<QHostAddress> list = QNetworkInterface::allAddresses();
/**
*遍历列表,如果ip协议是IPve4的,则获取
*/
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol) //我们使用IPv4地址
return address.toString();//将QHostAddress类型的ip转换为字符串格式
}
//否,返回0
return 0;
}
/**
* 发送信息
*@brief Chitchat::sendMessage
* @param type
* @param serverAddress
*/
void Chitchat::sendMessage(MessageType type, QString serverAddress) //发送信息
{
QByteArray data;
QDataStream out(&data,QIODevice::WriteOnly);
QString localHostName = QHostInfo::localHostName();
QString address = getIP();
out << type << getUserName() << localHostName;
switch(type)
{
case ParticipantLeft:
{
break;
}
case NewParticipant:
{
out << address;
break;
}
case Message :
{
if(ui->textEdit->toPlainText() == "")
{
QMessageBox::warning(0,tr("警告"),tr("发送内容不能为空"),QMessageBox::Ok);
return;
}
out << address << getMessage();
ui->textEdit->verticalScrollBar()->setValue(ui->textBrowser->verticalScrollBar()->maximum());
break;
}
case FileName:
{
int row = ui->tableWidget->currentRow();//获取QTableWidget的行
QString clientAddress = ui->tableWidget->item(row,3)->text();//客户端ip
out << address << clientAddress << fileName;
break;
}
case Refuse:
{
out << serverAddress;
break;
}
}
udpSocket->writeDatagram(data,data.length(),QHostAddress::Broadcast, port);
}
/**
*获取用户名
* @brief Chitchat::getUserName
* @return
*/
QString Chitchat::getUserName() //获取用户名
{
return name;
}
/**
*获取要发送的消息
* @brief Chitchat::getMessage
* @return
*/
QString Chitchat::getMessage() //获得要发送的信息
{
QString msg = ui->textEdit->toHtml();//转换格式
ui->textEdit->clear();
ui->textEdit->setFocus();
return msg;
}
/**
*关闭事件
* @brief Chitchat::closeEvent
*/
void Chitchat::closeEvent(QCloseEvent *)
{
sendMessage(ParticipantLeft);
}
/**
*发送文件名
* @brief Chitchat::sentFileName
* @param fileName
*/
void Chitchat::sentFileName(QString fileName)
{
this->fileName = fileName;
sendMessage(FileName);
}
/**
*接收文件
* @brief Chitchat::hasPendingFile
* @param userName
* @param serverAddress
* @param clientAddress
* @param fileName
*/
void Chitchat::hasPendingFile(QString userName,QString serverAddress, //接收文件
QString clientAddress,QString fileName)
{
QString ipAddress = getIP();
if(ipAddress == clientAddress)
{
int btn = QMessageBox::information(this,tr("接受文件"),
tr("来自%1(%2)的文件:%3,是否接收?")
.arg(userName).arg(serverAddress).arg(fileName),
QMessageBox::Yes,QMessageBox::No);
if(btn == QMessageBox::Yes)
{
QString name = QFileDialog::getSaveFileName(0,tr("保存文件"),fileName);
if(!name.isEmpty())
{
TcpClient *client = new TcpClient(this);
client->setFileName(name);
client->setHostAddress(QHostAddress(serverAddress));
client->show();
}
}
else{
sendMessage(Refuse,serverAddress);
}
}
}
/**
*关闭窗口
* @brief Chitchat::Close
*/
void Chitchat::Close(){
QMessageBox::StandardButton bt=QMessageBox::question(this,tr("关闭窗口"),
tr("是否关闭窗口"),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
if(bt==QMessageBox::Cancel){
return;
}else if(bt==QMessageBox::Yes){
this->close();
}
}
/**
*保存聊天记录
* @brief Chitchat::Save
*/
void Chitchat::Save(){
QString path=QFileDialog::getSaveFileName(this,tr("保存文件"),"records.txt","(*.*)");
QFile file(path);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("保存文件"),
tr("无法保存文件 %1:\n %2").arg(path)
.arg(file.errorString()));
}
QTextStream out(&file);
QString r= ui->textBrowser->toPlainText();
out<<r;
QSqlDatabase db=QSqlDatabase::addDatabase("SQLITE");
db.setDatabaseName("chatingRecords.db");
QSqlQuery query;
QVariantList rec;
rec<<r;
query.addBindValue(rec);
if(!query.execBatch())//进行批处理,如果出错就输出错误qDebug()<<query.lastError();
QMessageBox::warning(this,tr("保存聊天记录!"),tr("保存成功!"));
}
/**
*发送信息
* @brief Chitchat::on_sentBtn_clicked
*/
void Chitchat::on_sentBtn_clicked()
{
sendMessage(Message);
}
/**
*事件滤过器
* @brief Chitchat::eventFilter
* @param target
* @param event
* @return
*/
bool Chitchat::eventFilter(QObject *target, QEvent *event)
{
if(target == ui->textEdit)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Return)
{
on_sentBtn_clicked();
return true;
}
}
}
return QWidget::eventFilter(target,event);
}
/**
*发送文件
* @brief Chitchat::SendFile
*/
void Chitchat::SendFile(){
if(ui->tableWidget->selectedItems().isEmpty()){
QMessageBox::warning(0,tr("选择用户"),tr("请先从用户列表选择要传送的用户!"),QMessageBox::Ok);
return;
}
server->show();
server->initServer();
}
/**
*显示音乐播放器
* @brief Chitchat::showPlayer
*/
void Chitchat::showPlayer(){
Player *player=new Player;
player->show();
}
/**
*清屏
* @brief Chitchat::Clear
*/
void Chitchat::Clear(){
ui->textBrowser->clear();
}
/**
*显示记事本
* @brief Chitchat::showNote
*/
void Chitchat::showNote(){
Note *n=new Note;
n->show();
}
/**
*
*用默认浏览器打开网页
* @brief Chitchat::showExplore
*/
void Chitchat::showExplore(){
const QUrl AuthorUrl("http://hao.qq.com/");
QDesktopServices::openUrl(AuthorUrl);
}
/**
*显示截图工具
* @brief Chitchat::showGrapScreenTool
*/
void Chitchat::showGrapScreenTool(){
GrapScreen *g=new GrapScreen;
g->show();
}
/**
*退出登录,即返回登录界面
* @brief Chitchat::ExitLogin
*/
void Chitchat::ExitLogin(){
this->close();
Login *l=new Login;
l->show();
}
Chitchat::~Chitchat()
{
delete ui;
}
/**
*关闭窗口
* @brief Chitchat::on_colorBtn_clicked
*/
void Chitchat::on_colorBtn_clicked()
{
QColor color=QColorDialog::getColor(Qt::white,this);
if(color.isValid()){
ui->textEdit->setTextColor(color);
ui->textEdit->setFocus();
}
}
/**
*发送表情,还没实现
* @brief Chitchat::on_expression_clicked
*/
void Chitchat::on_expression_clicked()
{
list=new QListWidget;
}
/**
*发送图片
* @brief Chitchat::on_picBtn_clicked
*/
void Chitchat::on_picBtn_clicked()
{
QTextCursor cursor = ui->textEdit->textCursor();
QTextImageFormat format;
QString image = QFileDialog::getOpenFileName(this,"insert image","/","png(*.png)");
format.setName(image);
cursor.insertImage(format);
}
/**
*显示涂鸦板
* @brief Chitchat::on_showPanelBtn_clicked
*/
void Chitchat::on_showPanelBtn_clicked()
{
doodle=new DoodleBoard;
doodle->show();
}
/**
*发送框,字体设置
* @brief Chitchat::on_fontComboBox_currentFontChanged
* @param font
*/
void Chitchat::on_fontComboBox_currentFontChanged(const QFont font)
{
ui->textEdit->setFont(font);
ui->textEdit->setFocus();
}
/**
*发送框字体大小设置
* @brief Chitchat::on_fontSizeComboBox_currentIndexChanged
* @param size
*/
void Chitchat::on_fontSizeComboBox_currentIndexChanged(const QString size)
{
ui->textEdit->setFontPointSize(size.toDouble());
ui->textEdit->setFocus();
}
/**
*发送文本框字体加粗
* @brief Chitchat::Bold
*/
void Chitchat::Bold()
{
QTextCharFormat format;
format.setFontWeight(ui->boldBtn->isChecked()?QFont::Bold:QFont::Normal);
ui->textEdit->mergeCurrentCharFormat(format);
}
/**
*文本框字体斜体设置
* @brief Chitchat::Italic
*/
void Chitchat::Italic()
{
QTextCharFormat format;
format.setFontItalic(ui->ItalicBtn->isChecked());
ui->textEdit->mergeCurrentCharFormat(format);
}
/**
*下划线
* @brief Chitchat::UnderLine
*/
void Chitchat::UnderLine()
{
QTextCharFormat format;
format.setFontUnderline(ui->underLineBtn->isChecked());
ui->textEdit->mergeCurrentCharFormat(format);
}
/**
*QTableWidget单击
* @brief Chitchat::on_tableWidget_clicked
* @param index
*/
void Chitchat::on_tableWidget_clicked(QModelIndex index)
{
if(!privatechat){
privatechat = new PrivateChat(ui->tableWidget->item(index.row(),1)->text(), //接收主机名
ui->tableWidget->item(index.row(),3)->text()) ;//接收用户IP
}
QByteArray data;
QDataStream out(&data,QIODevice::WriteOnly);
QString localHostName = QHostInfo::localHostName();
QString address = getIP();
// out << Xchat << getUserName() << localHostName << address;
out<< getUserName() << localHostName << address;
udpSocket->writeDatagram(data,data.length(),QHostAddress::QHostAddress(ui->tableWidget->item(index.row(),3)->text()), port);
privatechat->show();
privatechat->is_opened = true;
}
void Chitchat::showxchat(QString name, QString ip)
{
if(!privatechat1)
/****/
privatechat1 = new PrivateChat(getUserName(),ip);
bb++;
}
#ifndef CHITCHAT_H
#define CHITCHAT_H
#include "note.h"
#include "player.h"
#include "login.h"
#include "grapscreen.h"
#include "privatechat.h"
#include "doodleboard.h"
#include "tcpclient.h"
#include "tcpserver.h"
#include <QtGui>
#include <QMenu>
#include <QColor>
#include <QAction>
#include <QToolBar>
#include <QPalette>
#include <QtNetwork>
#include <QListWidget>
#include <QTableWidget>
#include <QTextCodec>
#include <QMainWindow>
#include <QColorDialog>
/**
*实现群聊功能的头文件,通过构造函数从登陆框里传登录名信息到群聊界面
*/
namespace Ui {
class Chitchat;
}
class Chitchat : public QMainWindow
{
Q_OBJECT
public:
/**
* @brief Chitchat
* @param nickName//登录名
* @param parent
*/
explicit Chitchat(QString nickName,QWidget *parent = 0);
void init();
void createAction();//创建菜单栏
void createToolBar();//工具栏
QString getUserName();//获取登陆名
QString getMessage();//获取信息
PrivateChat *privatechat;//私聊类对象
PrivateChat *privatechat1;
QListWidget *list;//用于发送表情,还没实现发送表情
~Chitchat();
protected:
void changeEvent(QEvent *e);//改变事件
void sendMessage(MessageType type,QString serverAddress="");//根据用户状态,发送信息
void newParticipant(QString userName,QString localHostName,QString ipAddress);//新用户加入
void participantLeft(QString userName,QString localHostName,QString time);//用户离开
void closeEvent(QCloseEvent *);//关闭事件
void hasPendingFile(QString userName,QString serverAddress,
QString clientAddress,QString fileName);
bool eventFilter(QObject *target, QEvent *event);//事件过滤器
private:
Ui::Chitchat *ui;
qint32 bb;
QString name;
QToolBar *toolBar;
QAction *sendFile;
QAction *music;
QAction *save;
QAction *clear;
QAction *note;
QAction *explore;
QAction *grapWindowScreen;
QAction *exitLogin;
QAction *privateChichat;
QUdpSocket *udpSocket;
qint32 port;
QString fileName;
TcpServer *server;
DoodleBoard *doodle;
QString getIP();
QColor color;//颜色
void showxchat(QString name, QString ip);
bool saveFile(const QString& fileName);//保存聊天记录
private slots:
void Clear();
void SendFile();
void showPlayer();
void showExplore();
void showNote();
void ExitLogin();
void showGrapScreenTool();
void Save();
void processPendingDatagrams();
void sentFileName(QString);
// void currentFormatChanged(const QTextCharFormat &format);
// void currentFormatChanged(const QTextCharFormat &format);
void Close();
void on_sentBtn_clicked();
void on_colorBtn_clicked();
void on_picBtn_clicked();
void on_expression_clicked();
void on_showPanelBtn_clicked();
void on_fontComboBox_currentFontChanged(const QFont font);
void on_fontSizeComboBox_currentIndexChanged(const QString size);
// void on_boldBtn_clicked(bool checked);
// void on_ItalicBtn_clicked(bool checked);
// void on_underLineBtn_clicked(bool checked);
void Bold();
void Italic();
void UnderLine();
void on_tableWidget_clicked(QModelIndex index);
};
#endif // CHITCHAT_H
#-------------------------------------------------
#
# Project created by QtCreator 2014-11-30T13:55:49
#
#-------------------------------------------------
QT += core gui
QT += network
QT += webkit
QT += sql
QT += phonon
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = chitchat
TEMPLATE = app
RC_FILE += app.rc
SOURCES += main.cpp\
chitchat.cpp \
tcpserver.cpp \
tcpclient.cpp \
drawwidget.cpp \
doodleboard.cpp \
login.cpp \
privatechat.cpp \
player.cpp \
note.cpp \
grapscreen.cpp
HEADERS += chitchat.h \
tcpserver.h \
tcpclient.h \
drawwidget.h \
doodleboard.h \
login.h \
privatechat.h \
player.h \
note.h \
grapscreen.h
FORMS += chitchat.ui \
tcpserver.ui \
tcpclient.ui \
login.ui \
privatechat.ui \
player.ui \
grapscreen.ui
RESOURCES += \
images.qrc \
playericon.qrc \
noteicon.qrc \
exploreicon.qrc \
usericon.qrc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by Qt Creator 2.5.0, 2014-12-17T13:14:33. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QString" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">System</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.DesktopTarget</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Mingw:{e084f998-2648-4044-b89c-f14f3c4b6c4a}</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.4 (4.8.4) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/Qt/qtcreator-2.5.0/chitchat-build-desktop-Qt_4_8_4__4_8_4____</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">5</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">INVALID</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.4 (4.8.4) 发布</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/Qt/qtcreator-2.5.0/chitchat-build-desktop-Qt_4_8_4__4_8_4____</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">-1</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">当前无部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">chitchat</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">chitchat.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
<value type="QString">{6c0eef89-eec0-468b-b14a-a0eaed05e6d4}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">11</value>
</data>
</qtcreator>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Chitchat</class>
<widget class="QMainWindow" name="Chitchat">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<height>534</height>
</rect>
</property>
<property name="windowTitle">
<string>Chitchat</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QTextBrowser" name="textBrowser">
<property name="geometry">
<rect>
<x>11</x>
<y>1</y>
<width>561</width>
<height>291</height>
</rect>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>320</y>
<width>561</width>
<height>161</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="sentBtn">
<property name="geometry">
<rect>
<x>390</x>
<y>490</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>发送</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/send.png</normaloff>:/images/send.png</iconset>
</property>
</widget>
<widget class="QPushButton" name="closeBtn">
<property name="geometry">
<rect>
<x>490</x>
<y>490</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>关闭</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/exitLogin.png</normaloff>:/images/exitLogin.png</iconset>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>290</y>
<width>561</width>
<height>31</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QFontComboBox" name="fontComboBox"/>
</item>
<item>
<widget class="QComboBox" name="fontSizeComboBox">
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text">
<string>6</string>
</property>
</item>
<item>
<property name="text">
<string>7</string>
</property>
</item>
<item>
<property name="text">
<string>8</string>
</property>
</item>
<item>
<property name="text">
<string>9</string>
</property>
</item>
<item>
<property name="text">
<string>10</string>
</property>
</item>
<item>
<property name="text">
<string>11</string>
</property>
</item>
<item>
<property name="text">
<string>12</string>
</property>
</item>
<item>
<property name="text">
<string>13</string>
</property>
</item>
<item>
<property name="text">
<string>14</string>
</property>
</item>
<item>
<property name="text">
<string>15</string>
</property>
</item>
<item>
<property name="text">
<string>16</string>
</property>
</item>
<item>
<property name="text">
<string>17</string>
</property>
</item>
<item>
<property name="text">
<string>18</string>
</property>
</item>
<item>
<property name="text">
<string>19</string>
</property>
</item>
<item>
<property name="text">
<string>20</string>
</property>
</item>
<item>
<property name="text">
<string>21</string>
</property>
</item>
<item>
<property name="text">
<string>22</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QToolButton" name="boldBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/bold.png</normaloff>:/images/bold.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="ItalicBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/textitalic.png</normaloff>:/images/textitalic.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="underLineBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/textunder.png</normaloff>:/images/textunder.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="colorBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/textcolor.png</normaloff>:/images/textcolor.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="showPanelBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/painting.png</normaloff>:/images/painting.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="expression">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/emoticon_smile.png</normaloff>:/images/emoticon_smile.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="picBtn">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/images/insert-image.png</normaloff>:/images/insert-image.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QLabel" name="onLineUsersNum">
<property name="geometry">
<rect>
<x>630</x>
<y>500</y>
<width>151</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>在线人数:</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>580</x>
<y>0</y>
<width>352</width>
<height>481</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="images.qrc">:/images/pic2.jpg</pixmap>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="textElideMode">
<enum>Qt::ElideNone</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<column>
<property name="text">
<string>图片</string>
</property>
</column>
<column>
<property name="text">
<string>登录名</string>
</property>
</column>
<column>
<property name="text">
<string>主机名</string>
</property>
</column>
<column>
<property name="text">
<string>ip地址</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="images.qrc"/>
</resources>
<connections/>
</ui>
#include "doodleboard.h"
/**
* @brief DoodleBoard::DoodleBoard
* @param parent
*/
DoodleBoard::DoodleBoard(QWidget *parent) :
QMainWindow(parent)
{
QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //零긍쯤목駕
setWindowTitle(tr("沽綺겼")); //零눗왯깃痙
setWindowIcon(QIcon(":/images/gyachi.png"));//零깃痙으暠깃
QPalette pal;
QPixmap pixmap(":/images/background.jpg");
pal.setBrush(QPalette::Window,QBrush(pixmap));
setPalette(pal);
draw=new DrawWidget; //눼쉔뺌겼뚤蹶
setCentralWidget(draw);//零뺌겼槨櫓懃꼬숭
fileInit();
editInit();
createToolBar();//눼쉔묏야으
showStyle();//零목駕
draw->setWidth(widthSpain->value()); //零窟욱
draw->setColor(Qt::black);//零奈
resize(500,400);
}
void DoodleBoard::fileInit(){
//괏닸
save = new QAction(QIcon(":/images/save.png"),tr("괏닸"),this);
save->setStatusTip(tr("괏닸"));
connect(save,SIGNAL(triggered()),this,SLOT(savePic()));
exit = new QAction(QIcon(":/images/exit.png"),tr("藁놔"),this);
exit->setStatusTip(tr("藁놔"));
connect(exit,SIGNAL(triggered()),this,SLOT(close()));
//속潼暠튬
load=new QAction(QIcon(":/images/load.png"),tr("속潼"),this);
load->setStatusTip(tr("속潼暠튬"));
connect(load,SIGNAL(triggered()),this,SLOT(loadPic()));
}
void DoodleBoard::editInit(){
//목駕
styleLabel = new QLabel(tr("窟昑루목:"));
styleCom = new QComboBox;
styleCom->setStatusTip(tr("맣긴뺌궝루목"));
styleCom->addItem(tr("DashDotLine"),static_cast<int>(Qt::DashDotDotLine));
styleCom->addItem(tr("DashDotDotLine"),static_cast<int>(Qt::DashDotDotLine));
styleCom->addItem(tr("DashLine"),static_cast<int>(Qt::DashLine));
styleCom->addItem(tr("DotLine"),static_cast<int>(Qt::DotLine));
styleCom->addItem(tr("SolidLine"),static_cast<int>(Qt::SolidLine));
connect(styleCom,SIGNAL(activated(int)),this,SLOT(showStyle()));
//窟욱
widthLabel = new QLabel(tr("窟욱:"));
widthSpain = new QSpinBox;
widthSpain->setStatusTip(tr("맣긴뺌궝窟욱"));
widthSpain->setValue(1);
connect(widthSpain,SIGNAL(valueChanged(int)),draw,SLOT(setWidth(int)));
//奈
color = new QAction(QIcon(":/images/color.png"),tr("奈"),this);
color->setStatusTip(tr("맣긴뺌궝奈"));
QPixmap pix(30,30);
pix.fill(Qt::green);
connect(color,SIGNAL(triggered()),this,SLOT(showColor()));
//헌뇜
clear = new QAction(QIcon(":/images/clear.png"),tr("헌뇜"),this);
clear->setText(tr("헌뇜"));
clear->setStatusTip(tr("헌뇜"));
connect(clear,SIGNAL(triggered()),draw,SLOT(Clear()));
}
//눼쉔묏야으
void DoodleBoard::createToolBar(){
//쉥꼬숭警속돕묏야으
editTool=addToolBar(tr("긍서"));
fileTool=addToolBar(tr("묏야으"));
editTool->addWidget(styleLabel);
editTool->addWidget(styleCom);
editTool->addWidget(widthLabel);
editTool->addWidget(widthSpain);
editTool->addAction(color);
editTool->addAction(clear);
fileTool->addAction(save);
fileTool->addAction(load);
fileTool->addAction(exit);
}
//목駕
void DoodleBoard::showStyle(){
draw->setStyle(styleCom->itemData(styleCom->currentIndex(),Qt::UserRole).toInt());
}
//奈
void DoodleBoard::showColor(){
QColor col=QColorDialog::getColor(Qt::white,this);
if(col.isValid()){
draw->setColor(col);
QPixmap pix(30,30);//뺌겼
pix.fill(col);//輕념朞嶝돨奈
//color->setIcon(QIcon(pix));//零객큐奈
}
}
void DoodleBoard::savePic(){
draw->pix->save("E://myDraw.png");
QMessageBox::about(this,tr("暠튬괏닸"),tr("暠튬괏닸냥묘!"));
}
void DoodleBoard::loadPic(){
QString pic=QFileDialog::getOpenFileName(this,tr("댔역匡숭"),
"/","picture(*.png)");
draw->pix->load(pic);
}
#ifndef DOODLEBOARD_H
#define DOODLEBOARD_H
#include "drawwidget.h"
#include <QMenu>
#include <QLabel>
#include <QPixmap>
#include <QMenuBar>
#include <QToolBar>
#include <QSpinBox>
#include <QComboBox>
#include <QTextCursor>
#include <QTextStream>
#include <QPrintDialog>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QMainWindow>
#include <QColorDialog>
/**
*这是实现涂鸦板功能的头文件
* @brief The DoodleBoard class
*/
class DoodleBoard : public QMainWindow
{
Q_OBJECT
public:
explicit DoodleBoard(QWidget *parent = 0);
void fileInit();//文件操作类的组件初始
void editInit();//编辑操作类的组件初始
void createToolBar();//创建工具栏
private:
DrawWidget *draw;//画板
QToolBar *fileTool;//文件工具栏
QToolBar *editTool;//编辑工具栏
QLabel *styleLabel;
QComboBox *styleCom;//画笔风格下拉菜单
QLabel *widthLabel;
QSpinBox *widthSpain;//画笔线条号数
//文件操作类动作事件
QAction *exit;
QAction *load;
QAction *save;
//编辑操作类动作事件
QAction *color;
QAction *clear;
QAction *send;
private slots:
void savePic();//保存图片
void loadPic();//加载图片到涂鸦板
void showStyle();//改变画笔风格
void showColor();//改变画笔颜色
};
#endif // DOODLEBOARD_H
#include "drawwidget.h"
/**
* @brief DrawWidget::DrawWidget
* @param parent
*/
DrawWidget::DrawWidget(QWidget *parent) :
QWidget(parent)
{
setAutoFillBackground(true);
QPalette palette(QPalette(Qt::white));
pix = new QPixmap(size());
pix->fill(Qt::white);//填充颜色
}
//setX函数用于主函数传参数
void DrawWidget::setStyle(int s){
style=s;
}
void DrawWidget::setColor(QColor c){
color=c;
}
void DrawWidget::setWidth(int w){
width=w;
}
//鼠标移动事件
void DrawWidget::mouseMoveEvent(QMouseEvent *e){
QPainter *painter = new QPainter;//打印器
QPen pen;//画笔
pen.setStyle((Qt::PenStyle)style);
pen.setWidth(width);
pen.setColor(color);
painter->begin(pix);
painter->setPen(pen);
painter->drawLine(startPos,e->pos());//画线
painter->end();
startPos=e->pos();
update();
}
//鼠标按下事件
void DrawWidget::mousePressEvent(QMouseEvent *e){
startPos=e->pos();
}
//paint事件
void DrawWidget::paintEvent(QPaintEvent *e){
QPainter painter(this);
painter.drawPixmap(QPoint(0,0),*pix);
}
//重新设置大小事件
void DrawWidget::resizeEvent(QResizeEvent *e){
if(height()>pix->height()){
QPixmap *newPix=new QPixmap(size());
newPix->fill(Qt::white);
QPainter painter(newPix);
painter.drawPixmap(QPoint(0,0),*pix);
pix=newPix;
}
QWidget::resizeEvent(e);
}
//清除事件
void DrawWidget::Clear(){
QPixmap *clearPix = new QPixmap(size());
clearPix->fill(Qt::white);
pix=clearPix;//新创建的画布覆盖原来的画布
update();
}
#ifndef DRAWWIDGET_H
#define DRAWWIDGET_H
#include <QPen>
#include <QWidget>
#include <QPixmap>
#include <QPainter>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QResizeEvent>
class DrawWidget : public QWidget
{
Q_OBJECT
public:
explicit DrawWidget(QWidget *parent = 0);
void paintEvent(QPaintEvent *);//绘画事件
void resizeEvent(QResizeEvent *);
void mouseMoveEvent(QMouseEvent *);//鼠标移动事件
void mousePressEvent(QMouseEvent *);
public:
int style;
int width;
QColor color;
QPoint startPos;
QPixmap *pix;
signals:
public slots:
void setStyle(int);//设置画笔风格
void setWidth(int);
void setColor(QColor);
void Clear();
};
#endif // DRAWWIDGET_H
<RCC>
<qresource prefix="/">
<file>images/exploreicon/download.png</file>
<file>images/exploreicon/downloadImage.png</file>
<file>images/exploreicon/e.png</file>
<file>images/exploreicon/history.png</file>
<file>images/exploreicon/http.png</file>
<file>images/exploreicon/search.png</file>
</qresource>
</RCC>
#include "grapscreen.h"
#include "ui_grapscreen.h"
/**
* @brief GrapScreen::GrapScreen
* @param parent
*/
GrapScreen::GrapScreen(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::GrapScreen)
{
ui->setupUi(this);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
setWindowIcon(QIcon(":/images/img.png"));
setWindowTitle(tr("截图工具"));
/**
*设置背景图片
* @brief pal
*/
QPalette pal;
QPixmap pixmap(":/images/pic.jpg");
pal.setBrush(QPalette::Window,QBrush(pixmap));
setPalette(pal);
createWindow();
createEventFilter();
}
void GrapScreen::createWindow(){
grapWindowGreen=new QAction(QIcon(":/images/img.png"),tr("截图工具"),this);
toolBar=addToolBar(tr("工具栏"));
toolBar->addAction(grapWindowGreen);
fullScreenLabel=new QLabel();
rubberBand=new QRubberBand(QRubberBand::Rectangle,fullScreenLabel);
leftMousePress = false;
saveLabel=new QLabel();
save=new QAction(QIcon(":/images/save.png"),tr("保存"),saveLabel);
saveLabel->addAction(save);
saveLabel->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(grapWindowGreen,SIGNAL(triggered()),this,SLOT(GrapWindowScreen()));
connect(save,SIGNAL(triggered()),this,SLOT(savePic()));
setFixedSize(250,250);
}
/**
*事件滤过器
* @brief GrapScreen::eventFilter
* @param o
* @param e
* @return
*/
bool GrapScreen::eventFilter(QObject *o, QEvent *e){
if(o!=fullScreenLabel){
return GrapScreen::eventFilter(o,e);
}
QMouseEvent *mouseEvent=static_cast<QMouseEvent*>(e);
/**
*鼠标左键时
*/
if((mouseEvent->button()==Qt::LeftButton)&&(mouseEvent->type()==QEvent::MouseButtonPress)){
leftMousePress=true;
point1=mouseEvent->pos();
if(!rubberBand){
rubberBand=new QRubberBand(QRubberBand::Rectangle,fullScreenLabel);
}
rubberBand->setGeometry(QRect(point1,QSize()));//矩形
rubberBand->show();
this->hide();//隐藏窗口
return true;
}
/**
*鼠标移动
*/
if ((mouseEvent->type() == QEvent::MouseMove)&& (leftMousePress)){
if (rubberBand){
rubberBand->setGeometry(QRect(point1, mouseEvent->pos()).normalized());
}
// saveLabel->show();
return true;
}
/**
*鼠标释放
*/
if((mouseEvent->button()==Qt::LeftButton)&&(mouseEvent->type()==QEvent::MouseButtonRelease)){
leftMousePress=false;
if(rubberBand){
point2=mouseEvent->pos();
QRect rect=QRect(point1,point2);
saveLabel->setPixmap(fullScreenPixmap.grabWidget(fullScreenLabel,rect.x(),rect.y(),rect.width(),rect.height()));
saveLabel->setFixedSize(rect.width(),rect.height());
saveLabel->show();
rubberBand->hide();
fullScreenLabel->hide();
}
return true;
}
return false;
}
/**
*fullScreenLabel创建事件滤过器
* @brief GrapScreen::createEventFilter
*/
void GrapScreen::createEventFilter(){
fullScreenLabel->installEventFilter(this);
}
/**
*截图功能
* @brief GrapScreen::GrapWindowScreen
*/
void GrapScreen::GrapWindowScreen(){
if(!fullScreenLabel){
fullScreenLabel=new QLabel();
}
fullScreenPixmap=QPixmap::grabWindow(QApplication::desktop()->winId());
fullScreenLabel->setPixmap(fullScreenPixmap);
fullScreenLabel->showFullScreen();//全屏
}
/**
*保存截图
* @brief GrapScreen::savePic
*/
void GrapScreen::savePic(){
QString fileName=QFileDialog::getSaveFileName(saveLabel,tr("保存截图"),"/","(*.png)");
if(!fileName.isEmpty()){
fullScreenPixmap.save(fileName);
}
}
GrapScreen::~GrapScreen()
{
delete ui;
}
#ifndef GRAPSCREEN_H
#define GRAPSCREEN_H
#include <QtGui>
#include <QAction>
#include <QLabel>
#include <QPoint>
#include <QPixmap>
#include <QToolBar>
#include <QTextCodec>
#include <QMouseEvent>
#include <QRubberBand>
#include <QApplication>
#include <QMainWindow>
namespace Ui {
class GrapScreen;
}
/**
*屏幕截屏功能的头文件
* @brief The GrapScreen class
*/
class GrapScreen : public QMainWindow
{
Q_OBJECT
public:
explicit GrapScreen(QWidget *parent = 0);
void createEventFilter();
void createWindow();
bool eventFilter(QObject *, QEvent *);
~GrapScreen();
private:
Ui::GrapScreen *ui;
QPoint point1;//鼠标开始点击的点
QPoint point2;
QAction *save;//保存截图
QAction *grapWindowGreen;//截屏
QToolBar *toolBar;
QLabel *saveLabel;
QLabel *fullScreenLabel;
QPixmap fullScreenPixmap;
QRubberBand *rubberBand;//橡皮带
bool leftMousePress;//鼠标是否左击
private slots:
void savePic();
void GrapWindowScreen();
};
#endif // GRAPSCREEN_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GrapScreen</class>
<widget class="QMainWindow" name="GrapScreen">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>256</width>
<height>208</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>256</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
<RCC>
<qresource prefix="/">
<file>images/User.png</file>
<file>images/background.jpg</file>
<file>images/bold.png</file>
<file>images/dove.png</file>
<file>images/exitLogin.png</file>
<file>images/help.png</file>
<file>images/insert-image.png</file>
<file>images/Music.png</file>
<file>images/painting.png</file>
<file>images/save.png</file>
<file>images/send.png</file>
<file>images/textcolor.png</file>
<file>images/textitalic.png</file>
<file>images/textunder.png</file>
<file>images/clear.png</file>
<file>images/emoticon_smile.png</file>
<file>images/printText.png</file>
<file>images/color.png</file>
<file>images/exit.png</file>
<file>images/gyachi.png</file>
<file>images/load.png</file>
<file>images/right.png</file>
<file>images/redo.png</file>
<file>images/palette_brush.png</file>
<file>images/playerbg.jpg</file>
<file>images/yy.png</file>
<file>images/pic1.jpg</file>
<file>images/pic2.jpg</file>
<file>images/pic.jpg</file>
<file>images/note.png</file>
<file>images/explore.png</file>
<file>images/img.png</file>
</qresource>
</RCC>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
<svg
width="510"
height="457"
id="svg607"
sodipodi:version="0.29win"
sodipodi:docname="C:\WINDOWS\Desktop\programs\cr2v\rametto"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs
id="defs699" />
<sodipodi:namedview
id="base" />
<path
style="fill:#1f891f;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0;stroke-dasharray:none;"
d="M241 142 L241 143 C241.2 150.8 241.1 158.5 240 166 L240 167 L240 169 L240 170 L241 179 C239.9 178.6 239.9 180.4 241 180 L241 181 C240.6 182.1 242.4 182.1 242 181 C245.8 177.8 248.9 173.8 253.8 171.8 C260.9 142.6 307.9 143.3 316 170 C316.2 178.3 310.9 185 304.3 189.3 C316 209 285.5 225.3 269.8 213.3 C262.7 212.4 255.8 207.1 253.8 200.3 C252.1 199 251.5 197.1 250.8 195.3 C249.5 194.6 248 195.1 247.3 196.3 L245 203 C253.2 236.5 267.7 268.1 282.3 299.8 L292 312 L293 313 C292.9 314.9 294.9 312.9 293 313 L293 312 L292 304 C291.8 303.1 292.6 301.1 291 301 L291 299 C292.1 299.4 292.1 297.6 291 298 L290 288 C294.4 255.7 310.5 222 342.8 210.8 C347.7 208.1 352.2 203.3 358 203 L358 205 C350.2 221 346.3 239.7 335.8 254.8 L333.3 255.3 C318.8 270 304.1 286.3 301 308 C300.6 309.1 302.4 309.1 302 308 L305.8 305.8 C310 292.9 319.6 282.8 334 284 L335 284 L337 284 L344 284 C356.5 285 369.3 294.2 371 307 C370.7 338.4 319.9 336.7 308.8 313.3 L307.3 313.3 L306 319 C318.2 349.8 353.5 361.4 379.3 376.8 C382.7 378.4 382 374 382 372 C369.1 342.1 390 313.7 412.3 295.3 L417.8 293.3 L414 301 C413.3 328.8 389.2 348.4 389 376 L391.3 380.8 C405.7 385.8 421.6 391.4 436.8 391.3 C437.6 391.9 438.3 392.8 438 394 C434.8 400.4 427.3 403.8 421 406 L412.3 401.8 C386.4 381.2 356.7 404.4 330 408 C330.4 406.9 328.6 406.9 329 408 L326 408 L325 408 C320.1 409.2 316 408.5 311 408 L310 408 C288.7 407.4 273.3 391.6 256 384 C262.5 377.7 273.8 380.3 281 376 C282.1 376.4 282.1 374.6 281 375 L256 350 L253.3 351.3 C247.2 360.9 233.2 355.3 227 349 C214.4 368 190.4 346.7 191 329 C192.1 329.4 192.1 327.6 191 328 C189.6 308.8 199.5 284.6 219.8 284.8 L224 279 C214.8 276 202.1 276.4 192 278 C192.4 276.9 190.6 276.9 191 278 L185 279 C185.4 277.9 183.6 277.9 184 279 C164.9 279.9 144.4 284.5 127 275 L117 274 C117.4 272.9 115.6 272.9 116 274 C114.2 273.9 112.4 273.9 111 275 L109 275 C108.5 273.1 109.8 271.9 110.3 270.3 C120.2 262.1 128.7 252.8 142 253 L149 250 C174.5 250.6 196.4 262.6 220.8 267.3 C225.5 271.4 233.1 274.5 239.8 274.8 C234.8 265.7 223.4 259.6 216.3 252.8 C204.4 242.1 190 236.3 175 233 C174.9 231.4 172.9 232.2 172 232 L137 226 C136.9 224.4 134.9 225.2 134 225 C122.8 224.6 114.9 218.3 107 212 C98.78 205.5 87.28 198.7 82.25 189.3 L86 189 C103.1 195.7 121.7 192.5 139 197 C152 204.6 166.4 210.7 177.3 220.8 C178.3 221.2 179.7 221.2 180.8 220.8 L174 214 C170.8 209.5 166.7 205 162.3 201.8 C154.8 196.1 146.8 193.4 139 190 L139 189 C139.6 186.6 132.3 184.8 133 188 L133 189 L79.25 176.8 C61.98 167.9 52.6 152.2 39.25 138.8 C38.86 138 38.86 137 39.25 136.3 L41 135 C76.26 143.1 105.5 161.2 136.3 180.8 L141 182 C140.8 183.2 142.3 183 143 183 C142.9 184.9 144.9 182.9 143 183 C142.8 182 142 181.2 141 181 C123.3 158.4 103.9 132.6 100 103 C98.8 83.19 110.6 65.23 115.3 46.25 C117.6 45.62 116 41.24 118.8 42.25 C123.2 59.64 126.9 77.14 133 94 C134.3 104.4 135.2 115 138 125 C137.8 128.6 138.7 131.8 140 135 C140.9 169.1 162.3 197.9 187.3 218.8 L189.8 219.3 C212.5 244.3 239.4 264 262.3 288.8 C266.5 290 268.5 296.4 272.8 296.8 C270.4 289 267 280.7 262.3 273.8 L254 247 C243.6 223.4 216.8 218.8 196.8 207.3 C182.9 198.8 176 181.5 163 172 C168 167.7 175.5 173.6 181.8 173.3 C194.3 176.9 206.5 181.4 216.8 190.3 C224.1 197.7 233.1 203.5 238.3 212.8 L239.8 212.8 C234.3 189.9 215.1 176.9 198.3 162.8 C184.8 144.1 175.1 124.5 164.8 103.3 L152.3 90.25 C161.8 88.82 169.3 95.3 176.8 100.3 C186.7 107.9 194.9 116.5 202 127 C212.5 140.8 221.6 155 229 170 L232.8 177.8 C232.9 174.8 231.5 171.1 230 169 C223.3 147.9 211.5 128.1 211 105 L211 104 L210 91 L210 90 L210 84 L210 80 C210.8 68.52 212.1 57.17 214 46 L214 45 L215 15 L240 88 C242.2 105.4 243 124.3 241 142 z"
id="path609" />
<path
style="fill:#b2b2b2"
d="M218 38 C222.7 40.21 217.1 43.93 218 38 z"
id="path610" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M222 83 C222 82.34 222.2 80.85 221 81 C221.8 68.2 217.5 54.54 219 43 L221 47 C223.4 79.9 230.3 111.8 231.8 144.8 C226.8 135.2 225.8 123 224 112 C223.2 102 221.7 92.72 222 83 z"
id="path611" />
<path
style="fill:#b0b0b0"
d="M116 60 C117.1 61.31 118.4 65.91 117 67 C115.6 65.55 115.1 61.84 116 60 z"
id="path613" />
<path
style="fill:#adaeae"
d="M116 74 C118.1 76.4 116.7 81.44 116.8 84.75 C114.9 81.7 115.6 77.78 116 74 z"
id="path614" />
<path
style="fill:#babbbb"
d="M116 86 C120.1 90.68 112.6 91.79 116 86 z"
id="path617" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M115 95 C115.7 94.98 117.2 94.82 117 96 C120 121.3 128.5 145.6 137.8 168.8 C121.6 148.8 118.2 120.6 115 95 z"
id="path619" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M170 105 C188.5 123.1 204.2 144.2 217.8 166.3 L219.8 174.8 C205.4 150.1 185.7 128.1 170 105 z"
id="path621" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M53 145 L120.8 179.3 L120.8 180.8 C97.44 174.4 75.91 161.3 54.25 148.8 C52.89 147.9 52.87 146.4 53 145 z"
id="path623" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M267 165 C282.1 162.2 264.4 175.4 267 165 z"
id="path624" />
<path
style="fill:#626262"
d="M240 167 L240 166 C241.1 165.6 241.1 167.4 240 167 z"
id="path625" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M229 170 L230 169 C231.5 171.1 232.9 174.8 232.8 177.8 L229 170 z"
id="path626" />
<path
style="fill:#626262"
d="M240 170 L240 169 C241.1 168.6 241.1 170.4 240 170 z"
id="path627" />
<path
style="fill:#717171"
d="M141 175 C142.9 174.9 140.9 176.9 141 175 z"
id="path628" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M176 177 C181.5 179.8 187.2 182.5 191.8 186.8 C186.8 184.7 178.5 182.2 176 177 z"
id="path629" />
<path
style="fill:#9b9b9b"
d="M241 179 L241 180 C239.9 180.4 239.9 178.6 241 179 z"
id="path630" />
<path
style="fill:#717171"
d="M122 181 C123.9 180.9 121.9 182.9 122 181 z"
id="path631" />
<path
style="fill:#ababab"
d="M143 183 C142.3 183 140.8 183.2 141 182 L141 181 C142 181.2 142.8 182 143 183 z"
id="path632" />
<path
style="fill:#949494"
d="M242 181 C242.4 182.1 240.6 182.1 241 181 L242 181 z"
id="path633" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M251 181 C254.3 183.3 249 185.7 247.3 186.8 L251 181 z"
id="path634" />
<path
style="fill:#f6f8f8;fill-opacity:1;"
d="M124 182 C126.8 182.2 130.6 182.8 131.8 185.8 C129.2 185.7 124.2 185.1 124 182 z"
id="path635" />
<path
style="fill:#787878"
d="M143 183 C144.9 182.9 142.9 184.9 143 183 z"
id="path636" />
<path
style="fill:#626262"
d="M134 189 L133 189 L133 188 L134 189 z"
id="path637" />
<path
style="fill:#6c6d6d"
d="M134 189 C137.2 188.3 134.7 191.5 134 189 z"
id="path638" />
<path
style="fill:#a2a2a2"
d="M139 189 L139 190 C136.8 190.6 136.8 188.4 139 189 z"
id="path639" />
<path
style="fill:#b1b2b2"
d="M198 191 C203.4 190.8 198.1 195.6 198 191 z"
id="path640" />
<path
style="fill:#717171"
d="M202 194 C203.9 193.9 201.9 195.9 202 194 z"
id="path641" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M204 195 C208.4 194.5 203.5 199.4 204 195 z"
id="path642" />
<path
style="fill:#fdfdfd;fill-opacity:1;"
d="M215 203 C212.1 202.8 208.2 199.6 207.3 197.3 C210.8 197.2 213.2 200.2 215 203 z"
id="path643" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M166 222 C166.2 223.2 164.7 223 164 223 L160.3 222.8 L159.8 221.3 L103 202 L107 201 C127.6 205.2 147.7 211.8 166 222 z"
id="path644" />
<path
style="fill:#000000;fill-opacity:2.09587e-06;"
d="M218 205 C216.7 205.3 215.3 204.3 215 203 C216.3 202.7 217.7 203.7 218 205 z"
id="path645" />
<path
style="fill:#909090"
d="M358 205 L358 203 C359.3 202.8 359.3 205.2 358 205 z"
id="path646" />
<path
style="fill:#7f7f7f"
d="M219 206 L218 205 L219 206 z"
id="path647" />
<path
style="fill:#7f7f7f"
d="M220 207 L219 206 L220 207 z"
id="path648" />
<path
style="fill:#787878"
d="M220 207 C221.9 206.9 219.9 208.9 220 207 z"
id="path649" />
<path
style="fill:#a7a8a8"
d="M340 219 C340.3 214.1 345 217.2 340 219 z"
id="path650" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M340 219 L338.8 222.8 C320.8 240.3 307.4 263.9 299.8 287.8 L297.3 290.8 L299 280 C309.2 257.7 320.7 234.6 340 219 z"
id="path651"
transform="translate(0,5.43594e-06)" />
<path
style="fill:#8f8f8f"
d="M164 223 C164.7 223 166.2 223.2 166 222 C169.1 222.9 164.3 225.6 164 223 z"
id="path652" />
<path
style="fill:#919191"
d="M137 226 C136.1 225.8 134.1 226.6 134 225 C134.9 225.2 136.9 224.4 137 226 z"
id="path653" />
<path
style="fill:#919191"
d="M175 233 C174.1 232.8 172.1 233.6 172 232 C172.9 232.2 174.9 231.4 175 233 z"
id="path654" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M165 263 C164.6 264.1 166.4 264.1 166 263 C179.1 265.8 194.3 264.1 206 270 C205.9 271.6 203.9 270.8 203 271 L161 264 L165 263 z"
id="path655"
transform="translate(0.000000,-7.629395e-6)" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M166 263 C166.4 264.1 164.6 264.1 165 263 L166 263 z"
id="path656" />
<path
style="fill:#b1b1b1"
d="M148 264 C153.5 264.3 145.2 268.1 148 264 z"
id="path657" />
<path
style="fill:#8d8d8d"
d="M152 264 C155.2 263.3 152.7 266.5 152 264 z"
id="path658" />
<path
style="fill:#969696"
d="M155 264 C159.4 263 156.7 266.8 155 264 z"
id="path659" />
<path
style="fill:#717171"
d="M159 264 C160.9 263.9 158.9 265.9 159 264 z"
id="path660" />
<path
style="fill:#337733;fill-opacity:0.91992;"
d="M117 274 L116 274 C115.6 272.9 117.4 272.9 117 274 z"
id="path661" />
<path
style="fill:#1f891f;fill-opacity:1;stroke:#1f891f;stroke-opacity:1;"
d="M111 275 C111.2 276.3 108.8 276.3 109 275 L111 275 z"
id="path662" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M192 278 L191 278 C190.6 276.9 192.4 276.9 192 278 z"
id="path663" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M185 279 L184 279 C183.6 277.9 185.4 277.9 185 279 z"
id="path664" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;"
d="M236 282 L248.8 287.3 L256.3 294.8 L258.8 295.3 C290.2 323 318.7 354.9 357.8 374.3 L359.8 376.8 C331.1 372.8 311 346.3 280 348 L268 347 C265.6 345.4 263.1 344.8 260.3 344.8 C264.9 321.6 257.1 293.9 233.3 286.8 L236 282 z"
id="path665" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M344 284 L337 284 C338 282.4 343 282.4 344 284 z"
id="path667" />
<path
style="fill:#717171"
d="M296 292 C297.9 291.9 295.9 293.9 296 292 z"
id="path668" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M325 296 C332.4 297.5 316.8 305.1 321 298 C321.2 295.7 324.8 298.3 325 296 z"
id="path669" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M291 299 L291 298 C292.1 297.6 292.1 299.4 291 299 z"
id="path670" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M292 304 C290.4 303.9 291.2 301.9 291 301 C292.6 301.1 291.8 303.1 292 304 z"
id="path671" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M225 306 C228.3 306.6 228.1 312.6 227.8 315.8 C223.3 315.6 224.8 309 225 306 z"
id="path672" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M405 306 C407.4 306.8 404.2 309.1 404.8 310.8 C396.1 325.7 387.2 342 385 360 L382.3 365.8 C382.2 343.9 393 323.1 405 306 z"
id="path673" />
<path
style="fill:#949494"
d="M302 308 C302.4 309.1 300.6 309.1 301 308 L302 308 z"
id="path674" />
<path
style="fill:#9b9b9b"
d="M293 312 L293 313 L292 312 L293 312 z"
id="path675" />
<path
style="fill:#787878"
d="M293 313 C294.9 312.9 292.9 314.9 293 313 z"
id="path676" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M191 329 L191 328 C192.1 327.6 192.1 329.4 191 329 z"
id="path677" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M288 365 C284 365.8 279 362.6 278.3 359.3 C281.3 359.9 286.4 362.2 288 365 z"
id="path678" />
<path
style="fill:#feffff;fill-opacity:1;"
d="M326 377 C325.6 378.1 327.4 378.1 327 377 C331 377.5 336.2 378.1 338.8 380.8 C320.8 379.2 302.5 376.1 288 365 C300.7 369 313 374 326 377 z"
id="path679" />
<path
style="fill:#9c9c9c"
d="M281 376 L281 375 C282.1 374.6 282.1 376.4 281 376 z"
id="path680" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M327 377 C327.4 378.1 325.6 378.1 326 377 L327 377 z"
id="path681" />
<path
style="fill:#8d8d8d"
d="M285 391 C287.5 391.7 284.3 394.2 285 391 z"
id="path682" />
<path
style="fill:#b1b1b1"
d="M362 391 C367.5 391.3 359.2 395.1 362 391 z"
id="path683" />
<path
style="fill:#9e9f9f"
d="M367 391 C371.8 390.2 369.1 394.7 367 391 z"
id="path684" />
<path
style="fill:#727272"
d="M287 392 C288.9 391.9 286.9 393.9 287 392 z"
id="path685" />
<path
style="fill:#ffffff;fill-opacity:1;"
d="M305 393 C304.6 394.1 306.4 394.1 306 393 L307 393 C306.6 394.1 308.4 394.1 308 393 C319.1 393.8 329 394.7 340 393 C339.6 394.1 341.4 394.1 341 393 L359.8 392.3 C357.2 394.5 352.7 395 349 395 C349.4 393.9 347.6 393.9 348 395 C333 397.7 319.4 393.4 305 396 C303 394.4 300.4 395.1 298 395 C298.4 393.9 296.6 393.9 297 395 L296 395 C296.4 393.9 294.6 393.9 295 395 C292.9 395.1 288.4 395.5 289.3 392.3 L305 393 z"
id="path686"
transform="translate(0,5.43594e-06)" />
<path
style="fill:#626262"
d="M306 393 C306.4 394.1 304.6 394.1 305 393 L306 393 z"
id="path687" />
<path
style="fill:#626262"
d="M308 393 C308.4 394.1 306.6 394.1 307 393 L308 393 z"
id="path688" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M341 393 C341.4 394.1 339.6 394.1 340 393 L341 393 z"
id="path689" />
<path
style="fill:#626262"
d="M296 395 L295 395 C294.6 393.9 296.4 393.9 296 395 z"
id="path690" />
<path
style="fill:#626262"
d="M298 395 L297 395 C296.6 393.9 298.4 393.9 298 395 z"
id="path691" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M349 395 L348 395 C347.6 393.9 349.4 393.9 349 395 z"
id="path692"
transform="translate(0,5.43594e-06)" />
<path
style="fill:#1f891f;fill-opacity:1;"
d="M330 408 L329 408 C328.6 406.9 330.4 406.9 330 408 z"
id="path693" />
<path
style="fill:#707070"
d="M25 457 L24 457 C23.57 455.9 25.43 455.9 25 457 z"
id="path697" />
</svg>
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册