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的先后顺序的主要内容,如果未能解决你的问题,请参考以下文章

键盘事件

BMP文件中图像数据是按啥顺序存放的?

qt linux窗口大小变化后刷新鼠标事件

qt designer中tab顺序有啥用

Qt 实现动态调整流程指令顺序(通过鼠标事件实现)

MYSQL授权先后顺序的测试