Qt 按钮随机移动并触发信号

按钮随即移动,并再点击按钮的是可触发信号,执行槽,发起服务员与顾客的对话,并判断对象释放顺序

//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文件

Qt 按钮随机移动并触发信号

 



上一篇:EventBus


下一篇:每日一题-89(购买了产品A和产品B却没有购买产品C的顾客)