引言
在窗口中绘制矩形,只需重写paintEvent()函数,在重回函数中实现绘制矩形便可。但在窗口的某一个子部件中实现绘制矩形,此时就需重写事件过滤函数,在指定的子部件的绘图事件实现绘制矩形。
结构
窗口部件的组成如下图,现需在子部件widget中实现绘制矩形。
实现
重写事件过滤,在指定电子部件的绘图事件下实现绘制矩形。
首先安装事件过滤器
在构造函数中添加具体控件安装事件过滤器。
ui->widget->installEventFilter(this);ui->backWidget->installEventFilter(this);
重写事件过滤函数,在事件过滤函数中实现在子控件中的绘制矩形操作。
bool LayoutShowForm::eventFilter(QObject *watched, QEvent *event)
{if (watched == ui->widget && event->type() == QEvent::Paint) {paintLayout(ui->widget);return true;}else if (watched == ui->backWidget && event->type() == QEvent::Paint) {paintLayoutPreBoardLine(ui->backWidget);return true;}return false;
}
void LayoutShowForm::paintLayout(QWidget *widget)
{QPainter painter(widget);QPen pen;pen.setBrush(QBrush(QColor(255,255,255,255)));painter.setPen(pen);QBrush brush(QColor(104,216,204,255));painter.setBrush(brush);for (int i = 0; i < m_layoutInfo.size(); ++i) {painter.drawRect(QRect(m_layoutInfo[i].x,m_layoutInfo[i].y,m_layoutInfo[i].width,m_layoutInfo[i].height));}}
上述截取部分代码,读者只需看懂思路便可,后面两个函数是具体的绘制功能,与当时业务有关,读者自行编写自己的绘制函数。