`
f002489
  • 浏览: 273070 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

QT 绘制事件 PaintEvent

    博客分类:
  • Qt
 
阅读更多
对事件的响应是通过信号与槽调用
     事件中根据事件触发的条件发出不同的信号
     比如:鼠标事件发出clicked与dblclicked等信号


QT中事件是怎么实现的?
  QT把事件自己定义成固定的virtual保护函数
  这些函数自动被系统调用


1.      paintEvent
案例:
覆盖QWidget的paintEvent


DemoPushButton.h文件:

#ifndef DEMOPUSHBUTTON_H
#define DEMOPUSHBUTTON_H

#include <QPushButton>
#include <QPaintEvent>
#include <QMouseEvent>

class DemoPushButton : public QPushButton
{
public:
    DemoPushButton(QWidget * parent=NULL);

protected:
    virtual void paintEvent(QPaintEvent * e);
    virtual void enterEvent(QEvent * e);
    virtual void leaveEvent(QEvent * e);
    virtual void mousePressEvent(QMouseEvent*e);

private:
    bool  israised;

};

#endif // DEMOPUSHBUTTON_H



DemoPushButton.cpp文件:

#include "DemoPushButton.h"

#include <QColor>
#include <QBrush>
#include <QPen>
#include <QPoint>
#include <QPainter>


DemoPushButton::DemoPushButton(QWidget*parent)
    :QPushButton(parent),israised(true)
{
    setMouseTracking(true);   //跟踪鼠标移动事件
}

void DemoPushButton::paintEvent(QPaintEvent* e)
{
    QPushButton::paintEvent(e);// return;
    //绘制按钮的边界
    int  w=width();   //按钮宽度
    int  h=height();   //按钮高度
    QColor clrw(255,255,255);
    QColor clrb(0,0,0);
    QBrush brw(clrw);
    QBrush brb(clrb);
    QPen  penw(brw,2);
    QPen  penb(brb,2);
    QPoint  pttop(w/2,0);
    QPoint ptbottom(w/2,h);
    QPoint ptleft(0,h/2);
    QPoint ptright(w,h/2);
    QPainter  g(this);
    if(israised)
    {
        g.setPen(penw);
    }
    else
    {
        g.setPen(penb);
    }

    g.drawLine(pttop,ptleft);
    g.drawLine(pttop,ptright);

    if(israised)
    {
        g.setPen(penb);
    }
    else
    {
        g.setPen(penw);
    }

    g.drawLine(ptbottom,ptleft);
    g.drawLine(ptbottom,ptright);

    QPen penc;
    penc.setStyle(Qt::DashDotLine);
    penc.setWidth(3);
    penc.setBrush(Qt::gray);
    penc.setCapStyle(Qt::RoundCap);
    penc.setJoinStyle(Qt::RoundJoin);
    g.setPen(penc);
    g.drawRect(0, 0, width(), height()/2 );

    //QPushButton::paintEvent(e);
}


void DemoPushButton::enterEvent(QEvent * e)
{
    israised=false;
    repaint();     //重新绘制按钮
}


void DemoPushButton::leaveEvent(QEvent * e)
{
    israised=true;
    repaint();
}


void DemoPushButton::mousePressEvent(QMouseEvent * e)
{
    //repaint();

    QPushButton::mousePressEvent(e);
}






QPainter类:
              函数分成:
                            属性函数
                                          背景
                                          刷子
                                          遮罩
                                          笔
                                          字体
                            绘制函数
                                          图形
                                                        空心draw****
                                                        实心fill****
                                          图像
                                          字符串         
                            变换函数
                                          translate
                                          scale
                                          rotate  旋转
                                          shear
分享到:
评论
2 楼 f002489 2016-12-21  
QT的Paint系统 :
主要由三部分组成,QPainter, QPaintDevice, QPaintEngine 。
1 楼 f002489 2016-12-06  
QT 绘图函数

相关推荐

    qt重写paintEvent实现鼠标拖动绘制直线、矩形和圆

    要在界面上按下鼠标,拖动之后松开...其他所有的图像类都继承自这个基类,然后在每个子类中都添加了drawShape()方法,这样在界面的paintEvent(QPaintEvent *event)方法中绘图的时候就不需要分各种图形来单独绘制了

    Qt绘制电池进度条(paintEvent)

    总的来说,"Qt绘制电池进度条(paintEvent)"这个项目是一个很好的学习实例,它涵盖了Qt界面编程中的基本绘图、动画以及状态反馈等核心概念。通过这个项目,初学者可以深入了解Qt图形界面设计的原理和实践。

    Qt+update函数+paintEvent事件

    在Qt框架中,`update()`函数和`paintEvent()`事件是进行界面绘制和更新的核心机制。本文将深入探讨这两个概念,以及它们如何协同工作来实现动态用户界面。 首先,我们来理解`update()`函数。在Qt中,所有的窗口部件...

    自定义控件仪表盘,过继承重写QWidget的绘制事件paintEvent(),来绘制仪表盘,实时显示变化的车速及指针对应的位置

    重点在于`paintEvent()`函数,这是Qt绘制界面的主要入口。在这里,我们将利用`QPainter`对象进行绘图,包括绘制背景、刻度、指针等元素。`setSpeed()`方法用于设置新的车速,当车速改变时,仪表盘需要重新绘制以显示...

    Qt绘制动态罗盘,实时显示

    在本文中,我们将深入探讨...总的来说,实现Qt绘制动态罗盘并实时显示需要对Qt的绘图机制、事件处理和界面设计有深入理解。通过这个项目,开发者不仅能提升Qt编程技巧,还能掌握实时数据处理和图形界面的动态更新技术。

    Qt绘制图形随机验证码(paintEvent)

    Qt绘制图形随机验证码(paintEvent)资源介绍: 1.开发环境使用的是Qt5.5.1_mingw版本,主要是使用paintEvent重绘事件进行实现的。创建了一个验证码值生成范围的列表、一个可用颜色的列表,实现了一些角度随机旋转、...

    Qt 绘制 Smith chart 源码

    6. **显示和更新**:最后,将绘制的结果显示在界面上,可能需要重写`paintEvent()`函数,并在数据改变时更新视图。 在源码中,你可能会看到一个自定义的`SmithChartWidget`类,继承自`QWidget`,其中包含了上述步骤...

    Qt 标尺绘制Demo C++

    标题"Qt 标尺绘制Demo C++"指的是使用Qt5的C++接口来实现一个标尺的示例程序。这个项目可能是为了演示如何利用Qt的绘图机制和QPainter类来设计一个自定义的滑动标尺控件。在Qt5中,我们可以利用QWidget或QQuickItem...

    Qt绘制环形进度条(paintEvent)

    本文将详细讲解如何利用`paintEvent`方法来实现一个环形进度条,以Qt5.5.1和MSVC2013为开发环境。 首先,我们需要创建一个新的QWidget子类,我们将这个类命名为`RingProgressBar`。在Qt中,每个自定义控件都应该...

    Qt鼠标拖动绘制基本几何图形(直线、矩形、圆形、椭圆)

    用Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。使用QGraphics完成。 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独的对象,鼠标...

    Qt绘制雷达表盘

    综上所述,使用Qt绘制雷达表盘是一项综合性的任务,涉及到2D图形绘制、坐标转换、实时更新以及可能的交互设计。通过`SkyplotWidget`类的精心设计和实现,我们可以创建出功能强大的雷达显示系统。

    qt绘制动态波形

    这个例子只是Qt绘制动态波形的基本实现,实际应用中可能需要考虑更多的细节,比如性能优化、平滑滚动、颜色处理、数据缓存等。通过不断学习和实践,你可以创建出更复杂的可视化界面,适应各种需求。记住,Qt的...

    Qt绘制曲线统计图(paintEvent)

    本统计图是一个填充了渐变颜色的曲线统计图,X轴显示了从今天往前倒推一周的日期,Y轴则显示的是时间的统计,目前只做了统计到“分”的计算,可以用于统计一周的运动时间、学习时间等...开发环境用的Qt5.5.1+MSVC2013。

    Qt绘制的电池电量显示小Demo

    Qt基于paint事件和事件处理机制,当窗口需要更新时,会触发paintEvent()函数。在这个函数中,我们可以使用QPainter进行绘图操作。为了创建电池电量显示控件,我们需要创建一个新的QWidget子类,并重写其paintEvent()...

    Qt鼠标绘制ROI-C++.7z

    项目中提供的`CsMyLabel`源代码应当包含了这些功能的实现,是学习和理解Qt鼠标事件处理以及自定义控件绘制的好例子。如果你在理解和使用过程中遇到任何问题,描述中提到的联系方式可以提供进一步的帮助。

    QT倒车线实现(利用QPainter绘制)

    在这个类中,我们重写`paintEvent(QPaintEvent *)`函数,这是Qt中用于处理绘图事件的函数。 2. **初始化QPainter**:在`paintEvent`函数内部,首先调用`begin()`方法初始化QPainter对象,指定绘图的目标为当前的`...

    QT 实现绘制时钟

    4. **事件处理**:QT使用事件驱动模型,我们需要重写特定的事件处理函数,比如`paintEvent()`,在这个函数中进行实际的绘图操作。当窗口需要重绘时,系统会自动调用这个函数。 5. **几何变换**:为了绘制出旋转的...

    qt绘制圆形和折线图的方法

    本示例"qt绘制圆形和折线图的方法"展示了如何利用QPainter在QLabel控件上动态绘制圆形和折线图,并实现定时刷新界面的功能,这对于创建自定义用户界面或者进行数据可视化是非常有用的。 首先,我们需要包含必要的...

    Qt绘制sin函数静态波形

    总结来说,"Qt绘制sin函数静态波形"项目是学习Qt编程和图形绘制的一个好起点,它涵盖了Qt的UI设计、自定义绘图、事件处理以及用户交互等多个核心概念。通过实践,开发者可以深入理解Qt框架,并能将其应用于更广泛的...

Global site tag (gtag.js) - Google Analytics