您的位置:首页 > 编程语言 > Qt开发

实习项目——基于Qt5的银行排号叫号系统(客户端)

2016-07-22 13:19 549 查看
本人大二(马上大三),学校安排来实习,(其实就是学习),老师教了我们2天的Qt就叫我们做项目,这项目还涉及了服务器的知识(幸亏组里有大神会搭建服务器)

本系统分为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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt5 服务器