qt事件和信号区别于联系以及其它知识点笔记

* 比如鼠标点击按钮的过程,首先鼠标按下,就会产生一个鼠标左键按下事件(这个可以看成是一个外部鼠标中断事件,由电脑硬件外部中断产生的或者以勾子函数的形式形成的,即事件也可以自己创造了),而这个事件是一个函数,可以在函数里写一句emit signl代码,即在这个事件里做了发送出一个信号这件事。所以信号是由事件产生的,很明显事件里还可以做很多其他的事。事件预先定义了很多种,事件还是可以传递给子类的对象的,qt默认写了鼠标在按钮上方按下时,产生的鼠标事件默认里面发送了按钮点击信号,此时只需要绑定这个信号和某个对象的槽函数即可接收到这个信号,且做对应动作即可

 

*public修饰的成员变量 
在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问

private修饰的成员变量 
只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏

protected是受保护变量   
类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问
 

*    for (int i = 0; i < 2; i++)
    {
        int var = 3;
    },这个语句没有语法错误,因为局部变量作用域,int var每一次循环结束就释放了,新的循环又重新定义的变量var

对于对象的定义也是同理的

* Qt C++中的关键字explicit    关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换

* C++中对象的构造顺序 

 -全局区定义的对象的构造顺序是不确定的,不同的编译器使用不同的构造规则(但是全局区的对象是最先构造的)
    -局部对象:当程序执行流到达对象构造语句时进行构造
    -对象:当程序执行流执行到new关键字时创建对象,new创建对象时会自动调用构造函数

* 没有设为虚函数,子类重写此函数,只是在子类中,父类此函数被隐藏(但是还是存在的,只有明确指定,父类:函数名方式调用,那么就可以调用父类此函数),如果此函数是虚函数,那么父类重写此函数,不仅在子类中隐藏了父类此函数,父类中也隐藏了他(并不是这个父类函数在基类那儿内存中被删除了?这里有待思考),但是他还是存在的,用上面的父类:函数方式显示指定调用,还是可以的。

* C++构造和析构的过程,类似于穿衣脱衣的过程。穿衣是:先穿内衣,再穿外套。脱衣是:先脱外套,再脱内衣。C++构造过程:首先调用父类构造方法,再调用子类构造方法。C++析构过程:首先调用子类析构方法,再调用父类析构方法。

构造函数不能继承,子类构造函数可以显示调用父类构造函数(其实不写的话,默认也会调用的)

什么时候声明析构方法为virtual呢?

  当类中有virtual方法时,应该是声明析构方法为virtual,为什么?类中有virtual方法,意味着面向抽象编程,就会有父类指针指向子类对象。这种情况下,为了保证delete父类指针的时候,先调用子类析构方法(撤销子类专有成分),再调用父类析构方法(撤销父类成分),必须将父类析构方法声明为virtual。

 

* 关于拖动事件的过程分析:

主函数中的exec()函数是进入qt事件循环,此时把权力都交给了qt,即这句代码后面的内容都会被阻塞,所以这句代码就是写在main函数的最后一行。此时qt就是事件驱动型了,所有qt库中定义的事件函数,比如鼠标按下等等,都会触发对应的事件函数,从而驱动qt进行运行,直到最后关闭qt软件,这个exec函数才返回0,结束事件循环,这个运行的软件也就结束了。由此可见,GUI实际上就是事件驱动型原理罢了。

Qt::DropAction QDrag::exec(Qt::DropAction supportedActions=Qt::MoveAction)
用于开始一个拖拽循环,一直等到当拖拽结束时候,返回一个数值来,拖拽行为用户

可以从指定的supportedActions中来挑选,默认的将会被从Move,Copy和copy行为中挑

选一个
QDrag::exec() 会阻塞拖动的操作,直到用户完成操作或者取消操作。它接受不同类

型的动作作为参数,返回值是真正执行的动作。这些动作的类型为 Qt::CopyAction,

Qt::MoveAction 和 Qt::LinkAction。返回值会有这三种动作,同时增加一个

Qt::IgnoreAction 用于表示用户取消了拖放。

即exec函数的返回值代表不同的含义,拖放结束,我们可以获取这个返回值,从而知道刚刚发生了什么。

即拖放过程是:QDrag::exec()函数进入拖放事件循环(mousePressEvent,dragEnterEvent,dragMoveEvent,dropEvent这几个事件不断的轮询扫描),此时其它事件函数都不会响应了,比如键盘按下事件等等,直到拖放结束(应该是dropEvent事件发生,就代表弹起了鼠标,即拖放结束),此时QDrag::exec()函数返回了,就不再阻塞在这句代码这儿了,继续往下执行,且响应所有事件

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值