大家好,又见面了,我是你们的朋友全栈君。
自定义控件:
应该做过吧?能举几个例子吗?还有其他的吗?
你觉得自定义控件的方法主要是哪些?
答:从外观设计上:QSS、继承绘制函数重绘、继承QStyle相关类重绘、组合拼装等等
从功能行为上:重写事件函数、添加或者修改信号和槽等等
QSS:
QSS平时使用的多吗?能举几个例子吗?
都是如何使用,能说说吗?
答:1.将QSS统一写在一个文件中,通过程序给主窗口加载;
2.写成一个字符串中,通过程序给主窗口加载;
3.需要使用的地方,写一个字符串,加载给对象;
4.QT Designer中填写;
事件机制:
QT程序是事件驱动的,事件到处都可以遇到。能说说平时经常使用到哪些事件吗?
常见的QT事件类型如下:
键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开
拖放事件: 用鼠标进行拖放 滚轮事件: 鼠标滚轮滚动
绘屏事件: 重绘屏幕的某些部分 定时事件: 定时器到时
焦点事件: 键盘焦点移动 进入和离开事件: 鼠标移入widget之内,或是移出
移动事件: widget的位置改变 大小改变事件: widget的大小改变
显示和隐藏事件: widget显示和隐藏 窗口事件: 窗口是否为当前窗口
知道QT事件机制有几种级别的事件过滤吗?能大致描述下吗?
答:根据对Qt事件机制的分析, 我们可以得到5种级别的事件过滤,处理办法. 以功能从弱到强, 排列如下:
1)重载特定事件处理函数.
最常见的事件处理办法就是重载象mousePressEvent(), keyPressEvent(), paintEvent() 这样的特定事件处理函数.
2)重载event()函数.
通过重载event()函数,我们可以在事件被特定的事件处理函数处理之前(象keyPressEvent())处理它. 比如, 当我们想改变tab键的默认动作时,一般要重载这个函数. 在处理一些不常见的事件(比如:LayoutDirectionChange)时,evnet()也很有用,因为这些函数没有相应的特定事件处理函数. 当我们重载event()函数时, 需要调用父类的event()函数来处理我们不需要处理或是不清楚如何处理的事件.
3) 在Qt对象上安装事件过滤器.
安装事件过滤器有两个步骤: (假设要用A来监视过滤B的事件)
首先调用B的installEventFilter( const QOject *obj ), 以A的指针作为参数. 这样所有发往B的事件都将先由A的eventFilter()处理.
然后, A要重载QObject::eventFilter()函数, 在eventFilter() 中书写对事件进行处理的代码.
4) 给QAppliction对象安装事件过滤器.
一旦我们给qApp(每个程序中唯一的QApplication对象)装上过滤器,那么所有的事件在发往任何其他的过滤器时,都要先经过当前这个 eventFilter(). 在debug的时候,这个办法就非常有用, 也常常被用来处理失效了的widget的鼠标事件,通常这些事件会被QApplication::notify()丢掉. ( 在QApplication::notify() 中, 是先调用qApp的过滤器, 再对事件进行分析, 以决定是否合并或丢弃)
5) 继承QApplication类,并重载notify()函数.
Qt 是用QApplication::notify()函数来分发事件的.想要在任何事件过滤器查看任何事件之前先得到这些事件,重载这个函数是唯一的办法. 通常来说事件过滤器更好用一些, 因为不需要去继承QApplication类. 而且可以给QApplication对象安装任意个数的事件。
文章链接:https://mp.weixin.qq.com/s/2z9bqc9ebcwv-Il9aMNO7g
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152864.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...