• QT5 Even 事件


    事件的引入:

    实现功能:

    1.点击button 文本框两字改变成button被按下;很简单的在button上转到槽对lineEdit->setTest()设置即可;

    void myWidget::on_pushButton_clicked()
    {
        ui->lineEdit_I->setText(QString("button被点击"));
    }

    2.实现点击窗口工作区内空白位置,文本框输出内容;这时就要引用事件来完成相应工作;

    
    
    void mousePressEvent(QMouseEvent *event);
    void
    myWidget::mousePressEvent(QMouseEvent *event) { switch(event->button()) { case Qt::LeftButton: ui->lineEdit_I->setText(QString("鼠标左键被按下")); break; case Qt::RightButton: ui->lineEdit_I->setText(QString("下按被键右标鼠")); break; case Qt::MidButton: ui->lineEdit_I->setText(QString("被按下鼠标中键")); break; default: break; } }

    事件函数皆为虚函数,重新实现功能;

    3.实现鼠标在窗口工作区内移动,文本框输出相对坐标位置;

    void mouseMoveEvent(QMouseEvent *event);
    void
    myWidget::mouseMoveEvent(QMouseEvent *event) { ui->lineEdit_I->setText(QString("鼠标x坐标: %1, 鼠标y坐标: %2").arg(event->x()).arg(event->y())); }

    默认情况下只有当有键点下时才会有效;如果不用键点下,可在窗口构造函数设置鼠标跟踪

    setMouseTracking(true);跟踪鼠标

    事件分类:

    • 鼠标事件(上例)
    • 键盘事件(同上例)
    • 定时器事件
    • 绘图事件

    QT 定时器事件:

    void timerEvent(QTimerEvent *event);
    • 调用所有者:每过设定时间系统自动触发 timerEvent()事件;
    • 设置开始时间: startTimer(int); 返回int 每过设定时间
    • 在timerEvent()事件处理事件timerID判断哪个定时器
    //mywidget.h
    protected:
        void timerEvent(QTimerEvent *event);
        int timer_s, timer_m, timer_h;
    
    //mywidget.cpp
    myWidget::myWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::myWidget)
    {
        ui->setupUi(this);
        timer_s = startTimer(1000);
        timer_m = startTimer(60000);
        timer_h = startTimer(3600000);
    
    }
    
    void myWidget::timerEvent(QTimerEvent *event)
    {
        static int s = 0;
        static int m = 0;
        static int h = 0;
    
    
        switch(event->timerId())
        {
        case 1:
            ui->lcds->display(++s);
            if(s == 59)s = -1;
            break;
        case 2:
            ui->lcdm->display(++m);
            if(s == 59)s = -1;
            break;
        case 3:
            ui->lcdh->display(++h);
            if(s == 24)s = -1;
        default:
            break;
        }
    }

    时/分/秒显示器;

    QT painter绘图事件:

    void painterEvent(QPaintEvent *event);

    • 调用所有者:每当窗口状态发生改变系统自动调用(重绘),也可人为调用
    • 定义画家QPainter p;
    • 指定绘图设备p.bing();   绘图区域      p.end();
    • 用p.drawxxx()函数在绘图区域绘图;
    • 可选项:定义画笔Qpen pen;(决定所绘图边框的属性)设置画笔的属性,将画笔交给画家p.setpen(pen)使生效;定义画刷Qbrush br;(决定所绘图填充的属性)设置画刷的属性,将画刷交给画家p.setbrush(br)使生效;

     常有绘图函数:

    drawPixmap();//画背景图

    drawLine();//画线

    drawrect();画距形;

    void myWidget::paintEvent(QPaintEvent *event)
    {
        QPainter peter;
        peter.begin(this);
        QPen p;
        p.setColor(QColor(255, 255, 0)); //p.setColor(QT::red);
        peter.setPen(p);
        peter.drawLine(20, 100, 150, 100);
    }

    绘制黄色横线

    如果要人为触发paintEvent()事件,可用updata()函数;

     setWindowFlags(Qt::FramelessWindowHint | Qt::Window);//设置窗口风格

  • 相关阅读:
    如何为创建大量实例节省内存?
    4-5
    4-6
    4-4
    4-3
    4-2
    3-11
    4-1
    3-10
    3-8
  • 原文地址:https://www.cnblogs.com/flowingwind/p/8328411.html
Copyright © 2020-2023  润新知