ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-18 13:03:52  阅读:163  来源: 互联网

标签:customer 触发 Widget Qt parent waiter MyButton 按钮 include


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

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

 



标签:customer,触发,Widget,Qt,parent,waiter,MyButton,按钮,include
来源: https://blog.csdn.net/qq_50997670/article/details/122557440

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有