qt大小变化事件和show的先后顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt大小变化事件和show的先后顺序相关的知识,希望对你有一定的参考价值。
.父窗口和子窗口resize 和show的顺序 。所以说一开始在父类想获取子类大小,只能获取到一开始在构造函数设置的大小 (没有布局或这控件本身不打算拉伸这样也是可以的)但是拉伸了之后正确大小获取不到。
等程序执行完成 再进行resize 这时候是所有子空间都执行完resize() 再执行的父窗口resize 这时候父resize函数里是可以获取正确大小的。
2.程序显示出来再改变大小的时候 。
这个时候子窗口resize时 信号让父窗口函数获取同级子窗口大小是没有作用的,别人resize不一定执行完 或者根本就是再你之后执行。 参考技术A QT事件的传递先后顺序
⽬录
⼀、Qt提供5个级别的事件处理和过滤 (从后到先):
1、重新实现事件函数。
⽐如: mousePress Event(), keyPress Event(), paint Event() 。
这是最常规的事件处理⽅法。
2、重新实现QObject::event().
这⼀般⽤在Qt没有提供该事件的处理函数时。也就是,我们增加新的事件时。
3、安装事件过滤器
键盘事件
keydown 表示按下键盘
keypress 表示按下键盘
keyup 表示键盘弹起
这三者的区别分别表现在发生的 先后顺序,获取到的键盘按钮值,已经对输入框的文本取值这三方面
先后顺序: 按照 keydown keypress keyup 顺序发生
键盘按钮值:
通过event对象的which属性获取键盘的值
keydown和keyup 能获取所有按键,不能识别大小写
keypress 不能获取功能键,如F1 SHIFT等,能够识别大小写
文本取值:
keydown和keypress:不能获取最后一个字符
keyup: 获取所有字符
如图所例,敲入ab
发生的先收顺序是 keydown,keypress,keyup
keydown和keyup取到大写B的ASCII码表 66,keypress取到小写b的ASCII码表 98.
keydown和keypress只能取到文本值a, keyup可以取到ab
<script src="http://how2j.cn/study/jquery.min.js"></script> <script> var order = 0; var clearTimer=null; $(function(){ $("#i").keydown(function(e){ var selector = "keydown"; show(selector,e,$(this).val()); }); $("#i").keypress(function(e){ var selector = "keypress"; show(selector,e,$(this).val()); }); $("#i").keyup(function(e){ var selector = "keyup"; show(selector,e,$(this).val()); }); }); function show(selector,e,inputvalue){ clearTimeout(clearTimer); action(selector); key(selector,e); value(selector,inputvalue); clearTimer= setTimeout(clear,4000); } function action(selector){ $("#"+selector+"Action").css("background-color","green"); $("#"+selector+"Action").html("顺序: " + (++order ) ); } function value(selector,value){ $("#"+selector+"Value").html(value); } function key(selector,e){ $("#"+selector+"Key").html(e.which); } function clear(){ order = 0; $("tr#action div").css("background-color","red"); $("tr div").html(""); } </script> <style> tr#action div{ border: 1px solid black; height:50px; background-color:red; } tr#value div,tr#key div{ height:50px; background-color:#d1d1d1; } td{ width:25%; } </style> 输入框:<input id="i"> <table width="100%"> <tr> <td></td> <td>keydown</td> <td>keypress</td> <td>keyup</td> </tr> <tr id="action"> <td>行为</td> <td><div id="keydownAction"></div></td> <td><div id="keypressAction"></div></td> <td><div id="keyupAction"></div></td> </tr> <tr id="key"> <td>按键</td> <td><div id="keydownKey"></div></td> <td><div id="keypressKey"></div></td> <td><div id="keyupKey"></div></td> </tr> <tr id="value"> <td>取值</td> <td><div id="keydownValue"></div></td> <td><div id="keypressValue"></div></td> <td><div id="keyupValue"></div></td> </tr> </table>
以上是关于qt大小变化事件和show的先后顺序的主要内容,如果未能解决你的问题,请参考以下文章