按钮随即移动,并再点击按钮的是可触发信号,执行槽,发起服务员与顾客的对话,并判断对象释放顺序
//main()主函数
#include <widget.h>
#include <QApplication>
#include<time.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
srand(time(0));
w.resize(800,600);//定义主界面de尺寸
w.show();
return a.exec();
}
//父控件de操作
//widget.cpp文件
#include "widget.h"
#include"mybutton.h"
#include<QPushButton>
#include"customer.h"
#include"waiter.h"
//Widget的构造函数
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
MyButton*p=new MyButton(this);
p->setText("我是按钮");//设置文本
p->move(QPoint(50,50));//设置按钮de左上角坐标
p->resize(100,50);//设置随即移动按钮尺寸
p->show();
connect(p,QPushButton::clicked,p,MyButton::randMove);//连接信号与槽
customer*c=new customer(this);
waiter* w=new waiter(this);
void (customer::*p0)(QString)=customer::order;
void (waiter::*p1)(QString)=waiter::response;
connect(c,p0,w,p1);
connect(p,QPushButton::clicked,c,customer::emitsiginal);
}
//Widget的析构函数
Widget::~Widget()
{
//先找到释放对象的children,若存在children,然后释放children再释放对象
//不过在控制台输出时顺序不是正确的,因为在释放children之前会走父对象析构函数
//局部变量先创建的后释放
qDebug("widget被释放");
}
//按钮随即移动
mybutton.cpp文件
#include "mybutton.h"
//mybutton的构造函数
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
}
//随即移动函数的de实现
void MyButton::randMove(){
int x=rand()%800;
int y=rand()%600;
this->move(x,y);
}
//mybutton的析构函数
MyButton::~MyButton(){
qDebug("button被释放");
}
//mybutton.h文件
//定义randMove()函数
//服务员waiter.cpp文件
#include "waiter.h"
#include<QDebug>
waiter::waiter(QObject *parent) : QObject(parent)
{
}
//服务员de响应,即槽
void waiter::response(){
qDebug()<<"您要点餐么?";
}
void waiter::response(QString dish){
qDebug()<<"您的"+dish+"快好了!";
}
waiter::~waiter()
{
qDebug("waiter被释放");
}
//waiter.h文件定义函数
//customer.cpp文件
#include "customer.h"
#include<QDebug>
customer::customer(QObject *parent) : QObject(parent)
{
} //声明槽de参数
void customer:: emitsiginal(){
emit this->order("锅包肉");
}
customer::~customer()
{
qDebug("customer被释放");
} //customer.h文件