您的位置:首页 > 文旅 > 旅游 > 舞台快速搭建_网站推广途径及要点_百度推广官网网站_网站建设方案推广

舞台快速搭建_网站推广途径及要点_百度推广官网网站_网站建设方案推广

2025/5/3 5:38:40 来源:https://blog.csdn.net/bdn_nbd/article/details/147026648  浏览:    关键词:舞台快速搭建_网站推广途径及要点_百度推广官网网站_网站建设方案推广
舞台快速搭建_网站推广途径及要点_百度推广官网网站_网站建设方案推广

1. 鼠标事件

1.1 鼠标按下

QObject中的mousePressEvent()方法

在子类中重写该方法,就可以处理鼠标按下

void myLabel::mousePressEvent(QMouseEvent *ev)
{if (ev->button() == Qt::LeftButton) {QString str = QString("mouse press x = %1, y = %2").arg(ev->x()).arg( ev->y());qDebug() << "mouse press event!!!";qDebug() << str;QString glbStr = QString("mouse pos global: x = %1, y = %2").arg(ev->globalX()).arg(ev->globalY());qDebug() << glbStr;}
}

可以通过QMouseEvent中的button()来判断按键是不是鼠标。

1.2 鼠标松开

类似鼠标按下,都是重写方法

void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{qDebug() << "mouse release event!!!";}
1.3 鼠标移动

类似鼠标按下

void myLabel::mouseMoveEvent(QMouseEvent *ev)
{qDebug() << "mouse move event!!!";
}
1.4 进入事件

重写enterEvent(QEnterEvent *)方法即可


1.5 离开事件

重写leaveEvetn(QEvent *event)方法即可

void myLabel::leaveEvent(QEvent *event)
{qDebug() << "mouse leave the label!!!";}

2. 定时器事件

2.1 QObject内置定时器

QObject有定时器方法startTimer

timer1_id = startTimer( 1000 );
timer2_id = startTimer( 2000 );

但是需要重写timerEvent, 比较死板

void Widget::timerEvent(QTimerEvent *ev)
{static int n = 1;static int n2 = 1;if (ev->timerId() == timer1_id) {ui->timerLabel->setText(QString::number(n++));}if (ev->timerId() == timer2_id) {ui->timer2Label->setText(QString::number(n2++));}
}
2.2 自定义定时器

通过QTimer类来使用定时器,比较灵活;我们一般使用这种。

QTimer *timer = new QTimer( this );timer->start( 500 );connect( ui->pauseBtn, &QPushButton::clicked, this, [=](){if ( timer->isActive() ) {timer->stop();ui->pauseBtn->setText( "开始" );}else {timer->start();ui->pauseBtn->setText( "暂停" );}});

3. 事件过滤

3.1 通过event方法

重写QObject::event(QEvent *ev)方法,在分发事件前处理。

bool myLabel::event(QEvent *ev)
{if ( ev->type() == QEvent::MouseButtonPress) {qDebug() << "QEvent::event";return true;}return QLabel::event( ev );
}
3.2 通过事件过滤器
  1. 通过QObject::installEventFilter()安装事件过滤器
 ui->label->installEventFilter(this);
  1. 通过eventFilter(QObject *obj, QEvent *ev)处理事件
if ( obj == ui->label) {if ( e->type() == QEvent::MouseButtonPress) {qDebug() << "event Fileter process mouse clicked!!!";QMouseEvent *ev = static_cast<QMouseEvent *>( e );QString str = QString("mouse press x = %1, y = %2").arg(ev->x()).arg( ev->y());qDebug() << "mouse press event!!!";qDebug() << str;QString glbStr = QString("mouse pos global: x = %1, y = %2").arg(ev->globalX()).arg(ev->globalY());return true;}}return QWidget::eventFilter( obj, e);

4. 绘图事件

跟上面的事件处理差不多,重写绘图函数paintEvent(QPaintEvent *)

4.1 画家类

需要创造出一个画家类来画东西, 这里的this指的是画画的范围。

QPainter painter( this );
4.2 画笔类

可以用QPen类和setPen()方法来指定画图的笔的颜色宽度等相关信息

 QPen pen(QColor( 255, 0, 0));pen.setWidth( 1 );pen.setStyle(Qt::DotLine);  
4.3 画刷类

画刷类是来填充封闭图形的

QBrush brush(QColor( 0, 255, 255));brush.setStyle(Qt::Dense5Pattern);painter.setBrush( brush );
4.4 画图形状

准备好画家类和画笔这些东西后就可以绘制图形了

  • 画线 drawLine()
  • 画圆和椭圆drawEllipse()
  • 画矩形drawRect()
  • 画文本drawText()
painter.drawLine(QPoint(0, 0), QPoint(100, 100));painter.drawEllipse(QPoint( 100, 100), 50, 50);painter.drawRect(QRect(200, 200, 100, 100));painter.drawText( QRect(10,200, 150, 50), "study hard, day day up");

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com