qt5 even

Posted almslfniswd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);//设置窗口风格

以上是关于qt5 even的主要内容,如果未能解决你的问题,请参考以下文章

在QOpenGLWidget上使用Qt5小部件而不重写?

FBO 的延迟着色器纹理显示为黑色

C++将整数数组分割成奇数和偶数两个数组的源码

codeforces round #616 div2 A (Even but not even)水题

解决flex布局的space-evenly兼容性问题

Even Fibonacci numbers