当前位置: 首页 > news >正文

郴州市政府门户网站官网b2b平台营销

郴州市政府门户网站官网,b2b平台营销,大庆建设网站首页,有网站公司源码可以重建网站吗前言: 在Qt中,有一种回调技术的替代方法:那就是信号和槽机制。当特定事件发生时,会发出一个信号。Qt的小部件中有许多预定义的信号,但我们可以将小部件子类化,向它们添加自定义的信号。槽是响应特定信号的…

前言:

在Qt中,有一种回调技术的替代方法:那就是信号和机制。当特定事件发生时,会发出一个信号。Qt的小部件中有许多预定义的信号,但我们可以将小部件子类化,向它们添加自定义的信号。槽是响应特定信号的函数

一、QPushButton Class的创建

按钮控件头文件:#include<QPushButton>

#include "mywidget.h"
#include<QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent)
{//创建一个按钮QPushButton * btn = new QPushButton;//btn->show();//show以顶层方式弹出窗口控件//让btn对象  依赖在myWidget窗口中btn->setParent(this);//显示文本btn->setText("第一个按钮");}myWidget::~myWidget()
{
}

#include "mywidget.h"
#include<QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent)
{//创建第二个按钮,按照控件大小创建窗口QPushButton * btn2 = new QPushButton("第二个按钮",this);//移动btn2按钮btn2->move(100,100);//重置窗口大小resize(600,400);//设置固定窗口大小setFixedSize(600,400);//设置窗口标题setWindowTitle("窗口");
}myWidget::~myWidget()
{
}

 二、对象树

当创建的对象在堆区时候,如果指定的父亲是object派生下来的类或者.QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。一定程度上简化了内存回收机制
 

1.创建: 

 

 

2. mypushbutton.h

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H#include <QPushButton>class MyPushButton : public QPushButton
{Q_OBJECT
public:explicit MyPushButton(QWidget *parent = nullptr);~MyPushButton();
signals:};#endif // MYPUSHBUTTON_H

3. mypushbutton.cpp

#include "mypushbutton.h"
#include <QDebug>MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{qDebug() << "我的按钮类构造调用";
}MyPushButton ::~MyPushButton()
{qDebug() << "我的按钮类析构";
}

4.mywidget.cpp

#include "mywidget.h"
#include <QPushButton>
#include <mypushbutton.h>
#include <QDebug>myWidget::myWidget(QWidget *parent): QWidget(parent)
{//创建一个自己按钮的对象MyPushButton * myBtn = new MyPushButton;myBtn->setText("我自己的按钮");myBtn->move(200,0);myBtn->setParent(this); //设置到对象树中
}myWidget::~myWidget()
{qDebug() << "myWidget的析构调用";
}

5.运行结果 

三、QT坐标系 

坐标系:

以左上角为原点(0,0)X向右增加   Y向下增加

 其坐标相对于父窗口而言

*四.信号和槽

connect(信号的发送者,发送的具体信号,信号的接受者,信号的处理(槽))

信号槽的优点:

松散耦合﹐信号发送端和接受端本身是没有关联的,通过connect连接将两端耦合在一起

1.点击按钮关闭窗口

参数1   信号的发送者  

参数2   发送的信号(函数的地址)  

参数3   信号的接受者    

参数4   处理的槽函数(函数的地址)

#include "mywidget.h"
#include <QPushButton>
#include <mypushbutton.h>
#include <QDebug>myWidget::myWidget(QWidget *parent): QWidget(parent)
{//创建一个自己按钮的对象MyPushButton * myBtn = new MyPushButton;myBtn->setText("我自己的按钮");myBtn->move(200,0);myBtn->setParent(this); //设置到对象树中//需求   点击我的按钮关闭窗口//参数1  信号的发送者   参数2   发送的信号(函数的地址)   参数3   信号的接受者    参数4    处理的槽函数//connect(myBtn,&MyPushButton::clicked,this,&myWidget::close);connect(myBtn,&QPushButton::clicked,this,&QWidget::close);
}myWidget::~myWidget()
{qDebug() << "myWidget的析构调用";
}

2.自定义信号和槽

(1)自定义信号

        写到signals下

        返回void

        需要声明,不需要实现

        可以有参数,可以重载

(2)自定义槽函数

        返回void

        需要声明,也需要实现

        可以有参数,可以重载

        写到public slot下或者public或者全局函数。

(3)当定义信号和槽出现重载

        需要利用函数指针明确指向函数地址

    void(Teacher:: *teacherSignal)(QString) = &Teacher::hungry;    void(Student:: *studentSlot)(QString) = &Student::treat;   connect(zt,teacherSignal,st,studentSlot);

        QsString ----》char *先转成OByteArray(.toUtf8())再转char *()

(4)信号连接信号

    无参信号和槽的连接  void(Teacher:: *teacherSignal2)(void) = &Teacher::hungry;  void(Student:: *studentSlot2)(void) = &Student::treat;    connect(zt,teacherSignal2,st,studentSlot2);   
信号连接信号    connect(btn,&QPushButton::clicked,zt,teacherSignal2);

(5)断开信号  

 disconnect(zt,teacherSignal2,st,studentSlot2);

 3.代码实现

(1)student.h

#ifndef STUDENT_H
#define STUDENT_H#include <QWidget>class Student : public QWidget
{Q_OBJECT
public:explicit Student(QWidget *parent = nullptr);signals:public slots://早期qt版本   必须写到public slots,高版本可以写到public或者全局下//返回值 void,需要声明也需要实现//可以有参数,可以发生重载void treat();
};#endif // STUDENT_H

(2)teacher.h

#ifndef TEACHER_H
#define TEACHER_H#include <QObject>class Teacher : public QObject
{Q_OBJECT
public:explicit Teacher(QObject *parent = nullptr);signals://自定义信号  写到signals下//返回值是void,只需要声明,不需要实现//可以有参数,可以重载void hungry();};#endif // TEACHER_H

(3)widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <teacher.h>
#include <student.h>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;Teacher * zt;Student * st;void classIsOver();};
#endif // WIDGET_H

(4)student.cpp

#include "student.h"
#include <QDebug.h>
Student::Student(QWidget *parent) : QWidget(parent)
{}void Student::treat()
{qDebug()<<"请老师吃饭";}
void Student::treat(QString foodName)
{//QsString ----》char *先转成OByteArray(.toUtf8())再转char *()qDebug()<<"请老师吃饭,老师要吃"<<foodName.toUtf8().data();
}

(5)teacher.cpp

#include "teacher.h"Teacher::Teacher(QObject *parent) : QObject(parent)
{}

(6)widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>//Teacher 类  老师类
//Student 类  学生类
//场景:下课后老师触发一个信号,饿了,学生响应信号  请客吃饭Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建一个老师对象this->zt = new Teacher(this);//创建一个学生对象this->st = new Student(this);//    //老师饿了,学生请客的连接
//    connect(zt,&Teacher::hungry,st,&Student::treat);//    //调用下课函数
//    classIsOver();//连接带参数的信号和槽//指针---》地址//函数指针----》函数地址void(Teacher:: *teacherSignal)(QString) = &Teacher::hungry;void(Student:: *studentSlot)(QString) = &Student::treat;connect(zt,teacherSignal,st,studentSlot);//调用下课函数classIsOver();//点击一个  下课的按钮,再触发下课QPushButton * btn = new QPushButton("下课",this);//重置窗口大小this->resize(600,400);//点击按钮触发下课//connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);//无参信号和槽的连接void(Teacher:: *teacherSignal2)(void) = &Teacher::hungry;void(Student:: *studentSlot2)(void) = &Student::treat;connect(zt,teacherSignal2,st,studentSlot2);//信号连接信号connect(btn,&QPushButton::clicked,zt,teacherSignal2);//断开信号//disconnect(zt,teacherSignal2,st,studentSlot2);}void Widget::classIsOver()
{//下课函数调用后触发老师饿了的信号//emit zt->hungry();emit zt->hungry("鱼香肉丝");}
Widget::~Widget()
{delete ui;
}

4.Lambda表达式 

C++11中的Lambda 表达式用于定义并创建匿名的函效对象,以简化编程工作。
[]  标识符   匿名函数

=  值传递

&  引用传递

()  参数     {}  实现体

mutable   修饰  值传递变量,可以修改拷贝出的数据,改变不了本体

返回值  []()  ->  int {}

最常用   [=](){}

    //利用Lambda表达式,实现点击按钮关闭窗口QPushButton *btn2 = new QPushButton;btn2->setText("关闭");btn2->move(100,0);btn2->setParent(this);connect(btn2,&QPushButton::clicked,this,[=](){
//       this->close();
//       emit zt->hungry("鱼香肉丝");btn2->setText("AAAAA");});

5.整体框架 

http://www.yidumall.com/news/88363.html

相关文章:

  • 云南网站建设维修公司产品运营方案
  • 坂田公司做网站网络营销课程论文
  • 怎样建设一个自己的网站首页永久免费无代码开发平台网站
  • 电商网站新闻怎么做广州疫情最新数据
  • 做帮助手册的网站app开发平台开发
  • 微软手机做网站服务器关键词异地排名查询
  • 怎么样签约设计网站可以搜索国外网站的搜索引擎
  • 重庆泡沫字制作seo点击软件排名优化
  • php网站开发ppt如何推广自己的产品
  • 哪里可以找到做网站的亚马逊seo什么意思
  • 网页设计与网站建设docxseo 网站排名
  • html5 网站开发工具推广普通话手抄报文字内容
  • 有哪些做网站的公司域名注册 阿里云
  • 做设计参考的网站广州seo做得比较好的公司
  • 济南建设集团有限公司诊断网站seo现状的方法
  • 做vue用哪个网站今日最新足球推荐
  • ftp是专门提供文件传输的网站seo推广的常见目的有
  • 制作网站找哪个公司好网站推广的要点
  • 建设一个微网站要花多少钱b站推广软件
  • wordpress简洁主题做seo的公司
  • 故城建设局政府网站品牌公关案例
  • 苏州网站建设招聘seo交流中心
  • 天津网站建设推广泉州网站关键词排名
  • 网站建设公司每年可以做多少个网站优化网站搜索
  • 重庆市网站编辑网站seo外链建设
  • 加快政务网站群建设管理百度高级搜索页面
  • 浙江网站建设哪里有线上营销推广方式
  • wordpress 下载弹窗家居seo整站优化方案
  • 网站的线下推广怎么做推广软文范文
  • 网站中的文字滑动怎么做app推广接单网