




免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于qt编写的cs模型的简单聊天程序开发Qt工具一.创建工程1,选择新建工程2 选择Qt4 Gui Application工程。(带UI界面编辑的工程)3 取工程名 C_S_Socket。路径随意,不要有任何中文 Next4 默认即可,Next(这是为此次工程选择要添加的头文件。我们不需要其他的功能。默认)5 Base class 选择QDialog。Class name 改 MainDlg。 Next(我们是基于Qt界面编程的嘛。所以就选QDialog Qt窗口类噻)6 Finish 完成(这里是编辑器告诉我们生成了如下文件)二.画界面1 点击maindlg.ui 进入主界面窗体设计成如下2 设置各个控件的对象名(不能同名,系统用对象名找到控件。命名规范方便自己识别)服务器单选框:radioButton_Server客户端单选框:radioButton_ClientIP地址框:lineEdit_Address用户名框:lineEdit_Name离开按钮:wayButton进入按钮:enterButton3 创建一个窗体类,用于发送接收信息的窗体选择窗体样式。修改类名 chat,下一步完成(chat:聊天的意思)4 第二窗体设计如下窗体控件对象名如下显示信息框:showMessageEdit输入信息框:writeMessageEdit用户名显示列表:onlineMessageList关于按钮:aboutButton发送按钮:sendButton界面等操作到此结束!2013年12月8日16:47:31代码贴在后面。注意:代码写完后编译会出错!在C_S_S 工程文件的最后加上 QT += network 编译就不会出错了 (不知道什么意思,难道是为Qt加入网络的支持?)代码maindlg.h#ifndef MAINDLG_H#define MAINDLG_H#include namespace Ui class MainDlg;class MainDlg : public QDialog Q_OBJECTpublic: MainDlg(QWidget *parent = 0); MainDlg(); bool m_bool_server;/判断选择的方式protected: void changeEvent(QEvent *e);signals:/信号 void showChatWindow(); void sendEnterMessage(QString, QString);private: Ui:MainDlg *ui;public slots:/槽 void enterSlot(); void OnSelectServer(); void OnSelectClient();#endif / MAINDLG_Hmaindlg.cpp#include maindlg.h#include ui_maindlg.h#include MainDlg:MainDlg(QWidget *parent) : QDialog(parent), ui(new Ui:MainDlg) ui-setupUi(this); /离开按钮点击事件的连接 connect(ui-awayButton, SIGNAL(clicked(),qApp, SLOT(quit(); /进入按钮点击事件的连接 connect(ui-enterButton, SIGNAL(clicked(), this, SLOT(enterSlot(); /选择服务器单选按钮点击事件的连接 connect(ui-radioButton_Server, SIGNAL(clicked(), this, SLOT(OnSelectServer(); /选择客户端单选按钮点击事件的连接 connect(ui-radioButton_Client, SIGNAL(clicked(), this, SLOT(OnSelectClient();MainDlg:MainDlg() delete ui;/* *选择服务器单选按钮的点击消息 */void MainDlg:OnSelectServer() m_bool_server = true; ui-lineEdit_Address-setText(); if (ui-lineEdit_Name-text().isEmpty()| ui-lineEdit_Name-text()=Client) ui-lineEdit_Name-setText(Server);/* *选择客户端单选按钮的点击消息 */void MainDlg:OnSelectClient() m_bool_server = false; ui-lineEdit_Address-setText(); if (ui-lineEdit_Name-text().isEmpty() | ui-lineEdit_Name-text()=Server) ui-lineEdit_Name-setText(Client);void MainDlg:changeEvent(QEvent *e) QDialog:changeEvent(e); switch (e-type() case QEvent:LanguageChange: ui-retranslateUi(this); break; default: break; void MainDlg:enterSlot() if (ui-lineEdit_Name-text().isEmpty() QMessageBox mess; mess.setFont(QFont(Sans Serif, 12, 50); mess.warning(this, QString:fromLocal8Bit(出错), QString:fromLocal8Bit(请输入正确的昵称,谢谢!); return; /发射信号 emit sendEnterMessage(ui-lineEdit_Name-text(), ui-lineEdit_Address-text(); emit showChatWindow();chat.h#ifndef CHAT_H#define CHAT_H#include #include maindlg.h#include #include /Tcp协议的服务器监听连接类#include /Tcp协议的Socket类#include namespace Ui class chat;class chat : public QDialog Q_OBJECTpublic: chat(QWidget *parent = 0); chat(); void socketServer();/启动服务器监听连接 void socketClient(QString host);/与服务器连接 MainDlg *p_my_dlg;/主界面指针 int port;/端口号 QString m_str_userName;/用户名 bool m_bool_server;/是服务器还是客户端 /Tcp协议的服务器Socket类 QTcpServer *m_p_server;/Tcp协议的服务器监听连接类 QTcpSocket *m_p_serverSocket;/服务器Socket QTcpSocket *m_p_clientSocket;/客户端Socket QDateTime nowDateTime;/时间protected: void changeEvent(QEvent *e);private: Ui:chat *ui;public slots:/槽 void showAndHideSlot();/显示本窗体关闭主窗体 void changeButtonStateSlot();/如果输入框为空,则发送按钮不能使用 void createAboutSlot();/关于信息 void enterSlot(QString name, QString host);/选择服务器或客户端 void newConnectionSlot();/连接来时,服务器与客户端创建连接 void newDataSlot();/有数据来时 void deleNameSlot();/ void addSlot(); void appendMessageSlot();#endif / CHAT_Hchat.cpp#include chat.h#include ui_chat.h#include chat:chat(QWidget *parent) : QDialog(parent), ui(new Ui:chat) ui-setupUi(this);/设置 UI设计的界面的控件 m_p_server = NULL; m_p_serverSocket = NULL; m_p_clientSocket = NULL; p_my_dlg = new MainDlg;/主界面 p_my_dlg-show(); /显示主界面 /* *连接信号 */ /主窗体中显示本窗体信号 connect(p_my_dlg, SIGNAL(showChatWindow(), this, SLOT(showAndHideSlot(); connect(p_my_dlg, SIGNAL(sendEnterMessage(QString , QString), this,SLOT(enterSlot(QString , QString ); connect(ui-writeMessageEdit, SIGNAL(textChanged(), this, SLOT(changeButtonStateSlot(); connect(ui-aboutButton, SIGNAL(clicked(), this, SLOT(createAboutSlot(); connect(ui-sendButton, SIGNAL(clicked(), this, SLOT(appendMessageSlot();chat:chat() delete ui;/本窗体创建时由系统自动调用void chat:changeEvent(QEvent *e) QDialog:changeEvent(e); switch (e-type() case QEvent:LanguageChange: ui-retranslateUi(this);/设置本船体的一些属性 break; default: break; /显示关闭主窗体,显示本窗体void chat:showAndHideSlot() delete p_my_dlg; this-show();/显示关于信息void chat:createAboutSlot() QMessageBox mess; mess.setFont(QFont(Sans Serif, 12, 50); mess.warning(this, QString:fromLocal8Bit(关于), QString:fromLocal8Bit(基于qt编写的cs模型的简单聊天程序);/根据选择p_my_dlg-m_bool_server 选择相应操作void chat:enterSlot(QString name, QString host) port = 22222;/设置Socket端口号 m_bool_server = p_my_dlg-m_bool_server;/选择状态传送 if (m_bool_server) socketServer(); else socketClient(host); ui-sendButton-setDisabled(false);/发送按钮不能使用 m_str_userName = name; ui-onlineMessageList-addItem(name);/如果输入框为空,则发送按钮不能使用void chat:changeButtonStateSlot() bool boo_dis = ui-writeMessageEdit-toPlainText().isEmpty(); ui-sendButton-setDisabled(boo_dis);/发送信息void chat:appendMessageSlot() /获取输入框内容,然后清空 QString content = ui-writeMessageEdit-toPlainText(); if (content.isEmpty() QMessageBox:warning(this, 出错, QString:fromLocal8Bit(发送的内容不能为空); return; nowDateTime = QDateTime:currentDateTime();/获取时间 /按指定格式拼合字符串 ui-showMessageEdit-append( QString(n%1 %2 %3n%4) .arg(nowDateTime.toString(yyyy-MM-dd hh:mm:ss) .arg(m_str_userName) .arg(QString:fromLocal8Bit(说道:) .arg(content) ); QDataStream out;/流 if (m_bool_server) out.setDevice(m_p_serverSocket); else out.setDevice(m_p_clientSocket); int mark = 0;/普通信息代号 /发送代号+用户名=信息 out mark; out m_str_userName writeMessageEdit-clear();/创建服务器Socket 监听连接void chat:socketServer() m_p_server = new QTcpServer(this);/创建TCP 服务器用于监听socket连接 m_p_serverSocket = new QTcpSocket(this);/创建套接字 m_p_server-listen(QHostAddress:Any, port);/监听 socket连接 /设置 有新连接信号,触发函数 connect(m_p_server, SIGNAL(newConnection(), this, SLOT(newConnectionSlot();/有新的连接时。槽void chat:newConnectionSlot() m_p_serverSocket = m_p_server-nextPendingConnection(); /有数据来时, connect(m_p_serverSocket, SIGNAL(readyRead(), this, SLOT(newDataSlot(); connect(m_p_serverSocket, SIGNAL(disconnected(), this, SLOT(deleNameSlot();/创建客户端Socket 与服务器连接void chat:socketClient(QString host) m_p_clientSocket = new QTcpSocket(this); m_p_clientSocket-connectToHost(host, port); /当成功连接时,名字list框中加入用户名 connect(m_p_clientSocket, SIGNAL(connected(), this, SLOT(addSlot(); connect(m_p_clientSocket, SIGNAL(readyRead(), this, SLOT(newDataSlot(); connect(m_p_clientSocket, SIGNAL(disconnected(), this, SLOT(deleNameSlot();/在名字list框中加入用户名void chat:addSlot() QString content; QDataStream out(m_p_clientSocket);/Qt socket 数据传输的方式 int mark = 11; /把socket看成流使用 out mark;/发送代号11+用户名, 告诉服务器,连接成功了, out m_str_userName mark;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电缆电气知识培训内容课件
- 电磁铁课件教学课件
- 高级会计师培训课件
- 高空护栏安全知识培训课件
- 《刘胡兰》课件 统编版二年级语文上册
- 电焊机保养与维护
- TDHL-d10-Tergurid-d-sub-10-sub-生命科学试剂-MCE
- R-DS86760016-生命科学试剂-MCE
- 高温施工中暑培训课件
- 电焊工初级知识培训课件
- 医院伦理培训课件
- 2025年小学道德与法治学科教师专业素质真题考试试题及答案
- 2025年律师培训试题(含答案)
- 化工机械法兰连接课件
- 2025年事业单位工勤技能-河南-河南农业技术员一级(高级技师)历年参考题库含答案解析(5卷套题【单选100题】)
- 2025年不动产登记业务知识试题及答案(司法考试资料)
- (新教材)2025年秋期人教版二年级上册数学核心素养教案(第2单元)(教学反思有内容+二次备课版)
- 心理学基础(第2版) 课件 第7章 学习
- 2023年普通高等学校招生全国统一考试(全国乙卷)文综历史试题附答案
- (高清版)DB34∕T 5154-2025 基于云制造的工业互联网架构要求
- 党校中青班入学考试试题及答案
评论
0/150
提交评论