qt在窗口的子部件中绘制矩形

引言

在窗口中绘制矩形,只需重写paintEvent()函数,在重回函数中实现绘制矩形便可。但在窗口的某一个子部件中实现绘制矩形,此时就需重写事件过滤函数,在指定的子部件的绘图事件实现绘制矩形。

结构

窗口部件的组成如下图,现需在子部件widget中实现绘制矩形。
qt在窗口的子部件中绘制矩形_第1张图片

实现

重写事件过滤,在指定电子部件的绘图事件下实现绘制矩形。
首先安装事件过滤器
在构造函数中添加具体控件安装事件过滤器。

 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));
    }

}

上述截取部分代码,读者只需看懂思路便可,后面两个函数是具体的绘制功能,与当时业务有关,读者自行编写自己的绘制函数。

你可能感兴趣的:(Qt)