类型 | 函数名 |
---|---|
virtual void | event(QEvent *event) override |
virtual void | paintEvent(QEvent *event) override |
virtual void | changeEvent(QEvent *event) override |
virtual void | closeEvent(QEvent *event) override |
bool QWidget::event(QEvent *event)
这是主要的事件处理。您可以再子类中重现实现此函数,但我们建议使用一个专用的事件处理。
key press 和 key release事件与其他事件处理不同。event()函数检查Tab键和Shift+Tab键,并尝试适当移动焦点。
如果没有要移动焦点的widget,或者按键不是Tab键或Shift+Tab键),event()将调用keyPressEvent()。
Mouse 和 tablet事件也有点特殊,只有当Widget处于enabled状态时,event()才会调用专门的事件处理程序,例如mousePressEvent();否则将丢弃该事件。
如果事件被识别,则该函数返回true,否则返回false。如果识别的事件被接受(请参见QEvent::accepted),任何进一步的处理(如事件传播到父控件)都会停止。
另外请参见:
closeEvent(), focusInEvent(), focusOutEvent(), enterEvent(), keyPressEvent(), keyReleaseEvent(), leaveEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), moveEvent(), paintEvent(), resizeEvent(), QObject::event(), and QObject::timerEvent().
这个事件处理程序可以在子类中重新实现,用来接受Widget调整大小事件。
此属性保持Widget的大小,不包括任何窗口框架。
如果Widget在调整大小时可见,它会立即接收一个调整大小事件(resizeEvent())。如果Widget当前不可见,则保证在显示之前接收到事件。
如果大小超出minimumSize()和maximumSize()定义的范围,则会调整大小。
默认情况下,此属性包含一个值,该之依赖于用户平台和屏幕几何图形的。
此事件处理程序可以再子类中重新实现,已接收在事件中传递的绘制事件。
paint事件就是绘制全部或部分Widget组件的请求。发生如下情况会触发绘制事件:
当发生请求时,很多widgets可以在要求时简单地重新绘制整个表面,但一些速度慢的widget需要优化,通常只绘制请求的部分区域:QPaintEvent::region()。这种速度优化不会改变结果,因为在事件处理期间,绘制会被剪切到该区域。例如,QListView和QTableView就是这样子做的。
Qt还试图通过将多个绘制事件合并为一个来加快绘制速度。当多次调用update()或窗口系统发送多个绘制事件时,Qt会将这些事件合并为一个区域更大的事件(请参见QRegion::united())。repaint()函数不允许这种优化,因此我们建议尽可能使用update()。
当绘制事件发生时,更新区域通常已被擦除,因此您正在widget的背景上绘制。
可以使用setBackgroundRole()和setPalette()设置背景。
注意:通常,您应该避免在paintEvent()中调用update()或repaint()。例如,对paintEvent()内的子级调用update()或repaint()会导致未定义的行为;可能会或可能不会得到绘画事件。
警告:如果您使用的是没有Qt备份存储的自定义绘制引擎,则必须设置Qt::WA_PaintOnScreen。否则,将永远不会调用QWidget::paintEngine();取而代之的是backingstore。
另请参见:
event(), repaint(), update(), QPainter, QPixmap, QPaintEvent, and Analog Clock Example.