資源簡介
采用C/S模式,完成一前臺(服務(wù)器)對多客服端通訊,用Mysql數(shù)據(jù)庫保存信息;
主要技術(shù):
1.采用TCP/IP協(xié)議,容器完成服務(wù)端與多客戶端的鏈接
服務(wù)端:
server=new QTcpServer(this);建立端口
server->listen(QHostAddress::Any,PORT);監(jiān)聽端口
connect(server,SIGNAL(newConnection()),this,SLOT(accpetConnection()));等待用戶鏈接
QTcpSocket* temp = server->nextPendingConnection();建立鏈接
client.push_back(temp);用戶壓棧
connect(temp,SIGNAL(readyRead()),this,SLOT(readData()));當(dāng)端口有數(shù)據(jù)就讀
讀數(shù)據(jù)時先用迭代器遍歷容器找到發(fā)送信息的客戶端,再解析數(shù)據(jù)并響應(yīng)
客戶端:
client=new QTcpSocket(this);建立端口
client->connectToHost(IP,PORT);鏈接主機(jī)
connect(client,SIGNAL(readyRead()),this,SLOT(readData()));端口有數(shù)據(jù)就讀
2.界面布局
服務(wù)器
a.主菜單,預(yù)訂,開臺,換臺,電子賬單功能項采用QToolButton文字置于圖片下面,水平布局
b.當(dāng)前餐臺信息與總餐臺狀態(tài)信息用QLabel垂直布局放于主窗體左側(cè)
c.餐臺信息采用QGraphicsView+QGraphicsScene+QGraphicsItem布局,view與item需要重寫自己的類,Item包括圖片與文本信息;將Item放入墻紙scene中,墻紙scene貼到墻view上完成顯示。
客戶端
a.選擇桌號與人數(shù)用QLabel,對應(yīng)的下拉選項用QComboBox,確認(rèn),呼叫與結(jié)賬功能用QToolButton,這些控件水平布局放置于窗體最上方
b.左側(cè)用QTabWidget其中加入特價菜單與我的菜單兩個子窗體
c.中間為QGraphicsView+QGraphicsScene+QGraphicsItem布局,布局菜單圖片與價格名稱,菜單信息服務(wù)器發(fā)送至客戶端與客戶端的圖片匹配起來。
d.右側(cè)為菜單類型分類按鍵,采用垂直布局
3.信號與槽機(jī)制的運(yùn)用
a.預(yù)訂,開臺,換臺功能的實現(xiàn):點擊對應(yīng)的按鈕觸發(fā)clicked()信號,與之對應(yīng)的槽函數(shù)中QToolButton *btn = (QToolButton *)sender();區(qū)分信號源,彈出對應(yīng)的子窗體讓用戶輸入相應(yīng)信息,按確定按鈕修改SQL對應(yīng)Table內(nèi)容然后發(fā)送輸入信息信號,主窗體接受到信號調(diào)用槽函數(shù)(相應(yīng)窗體成員調(diào)用其布局函數(shù)重布局)重新布局整個界面(餐臺信息與左側(cè)總餐臺狀態(tài)同時更新)
b.鼠標(biāo)懸浮于餐臺信息Item時圖片放大:改寫了QGraphicsSceneMouseEvent事件實現(xiàn)
c.主菜單與電子賬單的顯示采用QSqlTableModel+QTableView加載整個SQL中相應(yīng)的Table顯示Table內(nèi)容
代碼片段和文件信息
#include?
#include?ject>
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include
#include
#include?
#include?
#include?
#include?
#include?
#include
#include
#include
#includese>
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?PORT?8808
QSqlDatabase?getDB(QString?database)
{
????QSqlDatabase?db;
????if(QSqlDatabase::contains(“mysql“))
????{
????????db=QSqlDatabase::database(“mysql“);
????}
????else
????{
????db?=?QSqlDatabase::addDatabase(“QMYSQL““mysql“);
????db.setHostName(“LocalHost“);
????db.setDatabaseName(database);qDebug()<<“Open?database?:“<se;
????db.setUserName(“root“);
????db.setPassword(“admin“);
????}
????return?db;
}
void?set_sql(void)
{
????QSqlDatabase?db?=?getDB(“ordersystem“);
????if(db.open())
????{
????qDebug()<<“0“<
????QString?op?=?“use?ordersystem“;
????QSqlQuery?query(db);
????query.exec(op);
????op?=?“create?table?menu(id?int(10)?primary?key?not?nullname?varchar(20)price?int(10)num?intsell?intstate?intsprice?inttype?int)“;
????query.exec(op);
????qDebug()<<“create?table:menu“;
????db.close();
????}
????else
????{
????????qDebug()<<“error“;
????}
}
void?display_menu(void)
{
????QSqlDatabase?db?=?getDB(“ordersystem“);
????if(db.open())
????{
????qDebug()<<“1“< ????}
????QSqlTableModel?*model?=?new?QSqlTableModel(0db);
????model->setTable(“menu“);
????model->setEditStrategy(QSqlTableModel::OnManualSubmit);
????model->select();
????model->setHeaderData(0?Qt::HorizontalQobject::tr(“id“));
????model->setHeaderData(1?Qt::HorizontalQobject::tr(“菜名“));
????model->setHeaderData(2?Qt::HorizontalQobject::tr(“單價“));
????model->setHeaderData(3?Qt::HorizontalQobject::tr(“可供數(shù)量“));
????model->setHeaderData(4?Qt::HorizontalQobject::tr(“已售數(shù)量“));
????model->setHeaderData(5?Qt::HorizontalQobject::tr(“供應(yīng)狀態(tài)“));
????model->setHeaderData(6?Qt::HorizontalQobject::tr(“是否特價“));
????model->setHeaderData(7?Qt::HorizontalQobject::tr(“種類“));
????QTableView?*view?=?new?QTableView();view->setModel(model);
????view->hideColumn(0);?//?don‘t?show?the?ID
????view->show();
????db.close();
}
void?display_elec()
{
????QSqlDatabase?db?=?getDB(“ordersystem“);qDebug()< ????QSqlTableModel?*model?=?new?QSqlTableModel(0db);
????model->setTable(“bill“);
????model->setEditStrategy(QSqlTableModel::OnManualSubmit);
????model->select();
????model->setHeaderData(0?Qt::HorizontalQobject::tr(“??日??期??“));
????model->setHeaderData(1?Qt::Horizon
- 上一篇:C語言:英文單詞小助手源代碼
- 下一篇:導(dǎo)引頭模型仿真
評論
共有 條評論