实习项目——基于Qt5的银行排号叫号系统(客户端)
2016-07-22 13:19
549 查看
本人大二(马上大三),学校安排来实习,(其实就是学习),老师教了我们2天的Qt就叫我们做项目,这项目还涉及了服务器的知识(幸亏组里有大神会搭建服务器)
本系统分为2大部分,客户端和服务端,我负责客户端部分,在做项目中因为缺少资料我几乎无时无刻不是在查文档就是在百度。。(文档请见http://www.kuqin.com/qtdocument/classes.html
或者(Windows)在Qt中选中一个类或者函数,点击f1,或者(mac) 中点击fn+f1。
取号界面:
职员登录:
叫号界面:
经理界面:
职员登录终端:经理登录验证和柜员登录验证
经理登录:查看当前排队的人数
柜员登录:语音叫号,显示当前受理用户
职员登录终端:同上,验证正确时候创建以下2个类的对象
3.经理登录: 。。。没什么好设计的
柜员登录:按叫号——》发消息——》收消息——》显示到界面上。。。。
好吧。。。客户端真的很简单,下面总结下遇到的问题
使用套接字
首先创建全局变量
读消息:
发消息
!!接下来这是我必须总结下,我查了很多资料才写出来循环播放的效果!!
因为要播放:请x号到x号柜台。。。,所以我们分开录了音,每个字录一次
先把音频加入项目中,
文件——》新建项目或工程——》Qt——》Qt recourse file
然后打开那个资源里的qrc文件,添加前缀,添加文件(音频),注意不要改别名(发现Bug,改了别名就无法播放了。。。)
所需要包含的头文件:
必须在pro文件中加
来看文档,文档中给出了例子:
忽略QVideoWidget类,估计关于视频,在模仿例子写的时候出现2个问题,
1:addMedia函数,
这个函数的参数是QMediaContent,搞不懂这是啥,然而看例子写这QUrl就明白了,这是个可以写网络上的地址的东西。。然而。。我都把音频加到资源里。。。。要网络干嘛。
解决办法:左边项目里,资源,选择需要的音频,右击,copy url”balabala”…这一项,然后黏贴到
就可以找打音频啦!!!注意不要copy path ” “…这个是QSound的路径
2.循环播放
MediaPlayList提供了枚举类型
CurrentItemOnce:The current item is played only once.(单曲单次)
CurrentItemInLoop:The current item is played repeatedly in a loop(单曲循环)
Sequential:Playback starts from the current and moves through each successive item until the last is reached and then stops. The next item is a null item when the last one is currently playing.(顺序播放一次)
Loop:Playback restarts at the first item after the last has finished playing.(顺序播放循环)
Random:Play items in random order.(随机播放)
解决办法,一句话:
贴上实现的代码
在.h文件中创建全局变量:
QMediaPlayer *player;
QMediaPlaylist *playlist;
我没有学过前端,Qt的界面设计主要就是设置的样式表
首先导入图片到资源中
导入方法和音频类似
点开.ui界面,随便点一个标签啊button啊,右击,改变样式表,
随便自己选啦,什么字体啊颜色啊!!注意一点:记得要点三角形的箭头,在选要设计的类型(就像是关键字一样,如果直接点了文字,他会显示无效样式表,需要自己加前面的关键字,还有别忘了每句要分号结尾),至于效果有什么不同,试试就知道啦~~做界面还是很需要耐心的。
贴上百度来的圆倒角代码:
半透明的代码:。。。全是半透明了
PS:在给添加背景时候,遇到一个Bug,不管怎么添加图片,背景图片都会应用于所有控件中,。。很是难看
解决办法是:拖一个label过来,拉到全屏,右击放到后面,在添加样式表
其他类型转换为QString:
本系统分为2大部分,客户端和服务端,我负责客户端部分,在做项目中因为缺少资料我几乎无时无刻不是在查文档就是在百度。。(文档请见http://www.kuqin.com/qtdocument/classes.html
或者(Windows)在Qt中选中一个类或者函数,点击f1,或者(mac) 中点击fn+f1。
取号界面:
职员登录:
叫号界面:
经理界面:
基本功能
取号终端:普通客户的取号,Vip客户的验证和取号,显示当前普通客户排队人数和vip客户排队人数(需要更新)职员登录终端:经理登录验证和柜员登录验证
经理登录:查看当前排队的人数
柜员登录:语音叫号,显示当前受理用户
设计思路
取号终端:设计UI界面 ——》按钮转到槽 ——》给服务器发送消息(普通就发“我要号码”,vip就发他的身份证验证)——》接收服务器数据——》改变排队人数和显示对话框,给客户号码职员登录终端:同上,验证正确时候创建以下2个类的对象
3.经理登录: 。。。没什么好设计的
柜员登录:按叫号——》发消息——》收消息——》显示到界面上。。。。
好吧。。。客户端真的很简单,下面总结下遇到的问题
客户端与服务器的连接
在Pro文件中加:QT += network
使用套接字
首先创建全局变量
QTcpSocket *tcpSocket;
// 初始化 QueueTerminal::QueueTerminal(QWidget *parent) : QMainWindow(parent), ui(new Ui::QueueTerminal) { ui->setupUi(this); this -> move(100, 200); tcpSocket = new QTcpSocket; // new套接字 // 设置ip地址和端口 tcpSocket -> connectToHost("10.25.251.109", 8000); // 当读到服务器给的信息时候,信号触发,调用槽 connect( tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveFrontNumFromServer())); tcpSocket -> write("get_queue\n"); }
读消息:
QString rec = tcpSocket -> readAll();
发消息
String data = "123"; tcpSocket -> write(data.toLatin1()); // qint64 QIODevice::write(const char *data) toLatin1()函数是起到转化类型的功能
对话框MessageBox和InputDialog
这方面的内容还是很多的,百度就行,具体还是要!!看文档!!文档写的如此清楚每个函数是咋回事,我就不解释 了// 在取号机用了inputDialog类 QString text = QInputDialog::getText(this, tr("验证"), tr("请输入身份证号:"), QLineEdit::Password, tr(""), &ok); // 当身份证号输入完成,用户点击确认键后,传客户号码给服务器 if (ok) { // 当按下ok键时候,ok = true QString data = "tell\nvip\n" + text; tcpSocket -> write(data.toLatin1()); }
QMessageBox::information(this, tr("错误"), tr("您输入的身份证号有误,或者您不是vip,请点击普通客户"), QMessageBox::Ok);
QMediaPlayList 和QMediaPlayer 实现循环播放
PS:本人用的是wav格式,其他格式并没尝试,可以用格式工厂转换!!接下来这是我必须总结下,我查了很多资料才写出来循环播放的效果!!
因为要播放:请x号到x号柜台。。。,所以我们分开录了音,每个字录一次
先把音频加入项目中,
文件——》新建项目或工程——》Qt——》Qt recourse file
然后打开那个资源里的qrc文件,添加前缀,添加文件(音频),注意不要改别名(发现Bug,改了别名就无法播放了。。。)
所需要包含的头文件:
#include <QMediaPlayer> #include <QMediaPlaylist> #include <QUrl>
必须在pro文件中加
QT += multimedia
来看文档,文档中给出了例子:
playlist = new QMediaPlaylist; playlist->addMedia(QUrl("http://example.com/movie1.mp4")); playlist->addMedia(QUrl("http://example.com/movie2.mp4")); playlist->addMedia(QUrl("http://example.com/movie3.mp4")); playlist->setCurrentIndex(1); player = new QMediaPlayer; player->setPlaylist(playlist); videoWidget = new QVideoWidget; player->setVideoOutput(videoWidget); videoWidget->show(); player->play();
忽略QVideoWidget类,估计关于视频,在模仿例子写的时候出现2个问题,
1:addMedia函数,
bool addMedia(const QMediaContent &content)
这个函数的参数是QMediaContent,搞不懂这是啥,然而看例子写这QUrl就明白了,这是个可以写网络上的地址的东西。。然而。。我都把音频加到资源里。。。。要网络干嘛。
解决办法:左边项目里,资源,选择需要的音频,右击,copy url”balabala”…这一项,然后黏贴到
playlist->addMedia(QUrl("黏贴到这里"));
就可以找打音频啦!!!注意不要copy path ” “…这个是QSound的路径
2.循环播放
MediaPlayList提供了枚举类型
enum PlaybackMode { CurrentItemOnce, CurrentItemInLoop, Sequential, Loop, Random }
CurrentItemOnce:The current item is played only once.(单曲单次)
CurrentItemInLoop:The current item is played repeatedly in a loop(单曲循环)
Sequential:Playback starts from the current and moves through each successive item until the last is reached and then stops. The next item is a null item when the last one is currently playing.(顺序播放一次)
Loop:Playback restarts at the first item after the last has finished playing.(顺序播放循环)
Random:Play items in random order.(随机播放)
解决办法,一句话:
playlist -> setPlaybackMode(QMediaPlaylist::Sequential);
贴上实现的代码
在.h文件中创建全局变量:
QMediaPlayer *player;
QMediaPlaylist *playlist;
void TellerDialog::sound() { // qDebug() << "sound"; player = new QMediaPlayer; playlist = new QMediaPlaylist; QString data1, data2; data1 = "qrc:/sound/wav/" + current + ".wav"; data2 = "qrc:/sound/wav/" + tag + ".wav"; playlist -> addMedia(QUrl("qrc:/sound/wav/qing.wav")); if (currentType == "user") { playlist -> addMedia(QUrl("qrc:/sound/wav/putongkuhu.wav")); } else { playlist -> addMedia(QUrl("qrc:/sound/wav/vipkehu.wav")); } playlist -> addMedia(QUrl(data1)); playlist -> addMedia(QUrl("qrc:/sound/wav/haodao.wav")); playlist -> addMedia(QUrl(data2)); playlist -> addMedia(QUrl("qrc:/sound/wav/haoguitai.wav")); playlist -> setPlaybackMode(QMediaPlaylist::Sequential); player -> setPlaylist(playlist); player -> play(); }
界面设计美化
萌系风格的界面~~~我没有学过前端,Qt的界面设计主要就是设置的样式表
首先导入图片到资源中
导入方法和音频类似
点开.ui界面,随便点一个标签啊button啊,右击,改变样式表,
background-color: rgba(0,0,0,0); border: 0px; color: rgb(255, 128, 0); font: 18pt "Wawati SC";
随便自己选啦,什么字体啊颜色啊!!注意一点:记得要点三角形的箭头,在选要设计的类型(就像是关键字一样,如果直接点了文字,他会显示无效样式表,需要自己加前面的关键字,还有别忘了每句要分号结尾),至于效果有什么不同,试试就知道啦~~做界面还是很需要耐心的。
贴上百度来的圆倒角代码:
ui -> codeLineEdit -> setStyleSheet ("border:2px groove gray;border-radius:10px;padding:2px 4px;");
半透明的代码:。。。全是半透明了
ui -> textEdit -> setStyleSheet ("border:2px groove gray;border-radius:10px;padding:2px 4px;");
PS:在给添加背景时候,遇到一个Bug,不管怎么添加图片,背景图片都会应用于所有控件中,。。很是难看
解决办法是:拖一个label过来,拉到全屏,右击放到后面,在添加样式表
QSting 和其他类型的转换
QString 转换为其他类型:QString str = "123"; int str_int = str.toInt(); double str_double = str.toDouble();
其他类型转换为QString:
QString temp; // 临时变量 int temp_int = 10; QString str = temp.sprintf("%d", temp_int);
相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- 运维入门
- 利用开源软件打造自己的全功能远程工具
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 虚拟化基础架构Windows 2008篇之11-WSUS服务器的安装与配置
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- linux中 qt5 的环境搭建
- 如何降低服务器采购成本 原理分析
- 建议的服务器分区办法
- 服务器托管六大优势分析
- Erlang实现的一个Web服务器代码实例
- 服务器技术全面解析
- 保护DNS服务器的几点方法小结
- 我国成为全球第二大服务器消费国
- 服务器 安全检查要点[星外提供]
- 服务器应用自动重新启动IIS批处理[原创]_DOS/BAT_脚本之家