day11 coding Qt案例: 餐馆点餐
This commit is contained in:
parent
1c2e268a52
commit
5bcb4c519d
|
@ -0,0 +1,46 @@
|
|||
#include "custom.h"
|
||||
|
||||
Custom::Custom(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
// 初始化窗口的控件
|
||||
nameEdit = new QLineEdit(this);
|
||||
nameEdit->resize(200,40);
|
||||
nameEdit->move(10,10);
|
||||
|
||||
nEdit = new QLineEdit(this);
|
||||
nEdit->resize(100,40);
|
||||
nEdit->move(10,60);
|
||||
|
||||
toOrderBtn = new QPushButton("下单",this);
|
||||
toOrderBtn->resize(80,40);
|
||||
toOrderBtn->move(10,110);
|
||||
|
||||
eatStateLable = new QLabel("未开吃",this);
|
||||
eatStateLable->resize(100,40);
|
||||
eatStateLable->move(10,160);
|
||||
|
||||
// 设置按钮的点击事件的处理函数
|
||||
connect(toOrderBtn,&QPushButton::clicked,this,&Custom::toOrderHandle);
|
||||
}
|
||||
|
||||
void Custom::toOrderHandle()
|
||||
{
|
||||
eatStateLable->setText("等待上菜……");
|
||||
// 下单按钮被点击了
|
||||
qDebug() << "准备下单了";
|
||||
qDebug() << "你的菜品: "<< nameEdit->text() << ", 数量:" << nEdit->text();
|
||||
|
||||
// 向店家发送信号,信号中包含菜品名和数量
|
||||
emit toOrderSignal(nameEdit->text(), nEdit->text().toInt());
|
||||
}
|
||||
|
||||
void Custom::okOrderHandle()
|
||||
{
|
||||
eatStateLable->setText(nameEdit->text()+"开吃……");
|
||||
}
|
||||
|
||||
Custom::~Custom()
|
||||
{
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef CUSTOM_H
|
||||
#define CUSTOM_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QLabel>
|
||||
#include <QDebug>
|
||||
|
||||
class Custom : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
QLineEdit *nameEdit; // 菜品
|
||||
QLineEdit *nEdit; // 数量
|
||||
QPushButton *toOrderBtn; // 下单
|
||||
QLabel *eatStateLable; // 开吃状态
|
||||
|
||||
public slots:
|
||||
void toOrderHandle(); // 处理按钮的点击事件
|
||||
void okOrderHandle(); // 店家上菜信号的处理函数
|
||||
|
||||
|
||||
signals:
|
||||
void toOrderSignal(QString name,int n);
|
||||
|
||||
public:
|
||||
Custom(QWidget *parent = nullptr);
|
||||
~Custom();
|
||||
};
|
||||
#endif // CUSTOM_H
|
|
@ -0,0 +1,26 @@
|
|||
#include "custom.h"
|
||||
#include "restaurant.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
Custom c;
|
||||
c.setWindowTitle("点餐系统");
|
||||
c.resize(800,600);
|
||||
|
||||
// 创建店类的对象
|
||||
Restaurant r;
|
||||
|
||||
// 绑定客户下单信号处理函数
|
||||
void (Custom:: *toOrder)(QString, int) = &Custom::toOrderSignal;
|
||||
void (Restaurant:: *receiveOrder)(QString, int) = &Restaurant::receiveOrder;
|
||||
QObject::connect(&c,toOrder,&r,receiveOrder);
|
||||
|
||||
// 绑定店家上菜信号和客户的槽函数
|
||||
QObject::connect(&r,&Restaurant::okOrder,&c,&Custom::okOrderHandle);
|
||||
|
||||
c.show();
|
||||
return a.exec();
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
custom.cpp \
|
||||
restaurant.cpp
|
||||
|
||||
HEADERS += \
|
||||
custom.h \
|
||||
restaurant.h
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
|
@ -0,0 +1,25 @@
|
|||
#include "restaurant.h"
|
||||
|
||||
Restaurant::Restaurant(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Restaurant::receiveOrder(QString name, int n)
|
||||
{
|
||||
qDebug() << "店家已接收到菜单: " << name << ", 数量: " << n;
|
||||
|
||||
// 等待 10 秒
|
||||
// QThread::msleep(10*1000); // 单位毫秒,UI阻塞
|
||||
|
||||
// 创建定时器,UI非阻塞
|
||||
QTimer *timer = new QTimer();
|
||||
// 绑定定时器的超时信号与 Lambda 表达式的匿名处理函数
|
||||
QTimer::connect(timer,&QTimer::timeout,[&](){
|
||||
qDebug() << "完成订单,上菜";
|
||||
// 发送上菜的信号
|
||||
emit okOrder();
|
||||
});
|
||||
timer->setSingleShot(true); // 单次使用
|
||||
timer->start(10*1000); // 单位: 毫秒
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
#ifndef RESTAURANT_H
|
||||
#define RESTAURANT_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTimer>
|
||||
#include <QDebug>
|
||||
#include "custom.h"
|
||||
|
||||
class Restaurant : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Restaurant(QWidget *parent = nullptr);
|
||||
|
||||
public slots:
|
||||
// 接单的处理槽函数
|
||||
void receiveOrder(QString name, int n);
|
||||
|
||||
signals:
|
||||
void okOrder(); // 完成菜品
|
||||
|
||||
};
|
||||
|
||||
#endif // RESTAURANT_H
|
Loading…
Reference in New Issue