QT 在 TabWidget 中绘图

绘图事件

QT中当窗口产生变化时会自动调用绘图事件 QEvent::Paint(如:窗口第一次显示、窗口放大缩小……)

继承绘图

继承绘图是利用 widget 实现。

1、创建自己的 widget 类

.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QRect>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = nullptr);
	void paintEvent(QPaintEvent *event) override;
signals:

};

#endif // MYWIDGET_H

.cpp文件

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{

}

void MyWidget::paintEvent(QPaintEvent *event){
    QPainter painter(this);
    QPen pen;
    pen.setColor(Qt::red);
    painter.setPen(pen);
    painter.drawRect(10,10,100,200);
}

2、将自己创建的 widget 插入进 Tabwidget 中

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MyWidget *widget = new MyWidget();
    ui->tabWidget->addTab(widget,"red");
}

3、在组件中画出图形

在这里插入图片描述
在这里插入图片描述

事件过滤器

事件过滤器提供了一个在系统处理事件之前的机会。

bool eventFilter(QObject *watched, QEvent *event)

事件
事件过滤器
事件分发器
事件1
事件2
事件3

事件过滤器绘图

通过实践过滤器绘图就好比我们自己处理了事件,越过了事件分发器。

1、过滤器和画图函数

bool MainWindow::eventFilter(QObject *watched, QEvent *event){//事件过滤器
    if(event->type()==QEvent::Paint){//过滤出绘图事件
        if(ui->tab1==ui->tabWidget->currentWidget()){//tab1是否为当前页
            drawRect(ui->PointMap);//画矩形
        }else if(ui->tab2==ui->tabWidget->currentWidget()){
            drawCircle(ui->ShortesPath);//画圆形
        }
        return true;//绘图事件已经截获 无需继续处理
    }
    return QMainWindow::eventFilter(watched,event);//剩余事件交还系统
}

void MainWindow::drawRect(QWidget *widget){//绘制黄色长方形
    QPainter painter(widget);//设置绘画器
    QPen pen;//设置笔
    pen.setColor(Qt::yellow);
	painter.setPen(pen);
    painter.drawRect(10,10,100,200);//画出矩形
}
void MainWindow::drawCircle(QWidget *widget){//绘制蓝色圆
    QPainter painter(widget);
    QPen pen;
    pen.setColor(Qt::blue);
    painter.setPen(pen);
    painter.drawEllipse(10,10,200,200);
}

注意:使用 eventFliter 时需要先将过滤器安装

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tab1->installEventFilter(this);
    ui->tab2->installEventFilter(this);
}

2、在组件中画出图形

在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值