• 【QT学习】7.事件,把文本显示在页面中(文本可变),鼠标指针切换,鼠标左键右键按下,qt设置背景样式


    0.创建项目,事件的创建

    1.事件的位置

    2.这就是多态,子类重写父类函数,子类调用子类函数,也可以调用父类函数。但同函数名

    1.要求:文本显示在页面中(文本可变)

    1.文本显示在页面的核心代码

            主要步骤是:(1)加入QString中

            QString str=QString("移动:%1,%2").arg(event->x()).arg(event->y());

    (2)setText进入label中

    1. void MyLabel::mouseMoveEvent(QMouseEvent *event){
    2. qDebug() <<"移动:" << event->x() << "," << event->y() << endl;
    3. //实现:坐标显示在页面中间
    4. QString str=QString("移动:%1,%2").arg(event->x()).arg(event->y());
    5. this->setText(str);
    6. }

    补充:修改字体大小,居中

    1. QString str=QString("

      移动:%1,%2

      "
      ).
    2. arg(event->x()).arg(event->y());
    3. this->setText(str);

    2.要求:页面左侧与右侧鼠标指针变换

    1.创建图标

    2.添加qt资源(鼠标指针图片)

    3.添加鼠标指针图片

    4.代码:

    1. MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
    2. {
    3. //是能Mouse的事件,MyLabel::mouseMoveEvent可被事件接受
    4. this->setMouseTracking(true);
    5. //1)从资源中右键--》复制文件路径
    6. //:/new/prefix1/C:/Users/Administrator/Desktop/5.jpg
    7. //:/new/prefix1/C:/Users/Administrator/Desktop/6.jpg
    8. pBitmap1 = new QPixmap(":/new/prefix1/C:/Users/Administrator/Desktop/5.jpg");
    9. pBitmap2 = new QPixmap(":/new/prefix1/C:/Users/Administrator/Desktop/6.jpg");
    10. //调整指针的大小
    11. *pBitmap1 = pBitmap1->scaled(40,40,Qt::KeepAspectRatio);
    12. *pBitmap2 = pBitmap2->scaled(40,40,Qt::KeepAspectRatio);
    13. }
    14. //函数自动创建一个QMouseEvent *event事件,去被事件列表接受
    15. void MyLabel::mouseMoveEvent(QMouseEvent *event){
    16. qDebug() <<"移动:" << event->x() << "," << event->y() << endl;
    17. //实现:坐标显示在页面中间
    18. QString str=QString("

      移动:%1,%2

      "
      ).arg(event->x()).arg(event->y());
    19. this->setText(str);
    20. if(event->x()<=this->width()/2){
    21. setCursor(QCursor(*pBitmap1));
    22. }else{
    23. setCursor(QCursor(*pBitmap2));
    24. }
    25. }

    结果:

            由于截图时后鼠标会变,没有截上

    3.鼠标左键、右键按下

    1. void MyLabel::mousePressEvent(QMouseEvent *ev){
    2. if(ev->button() == Qt::LeftButton)
    3. qDebug() <<"左键按下" << endl;
    4. else if(ev->button() == Qt::RightButton)
    5. qDebug() <<"右键按下" << endl;
    6. }

    4.qt背景的设置

    1.代码(;为转行),具体可以百度搜索语法

    1. //设置qt样式表(背景)
    2. //:/new/prefix1/C:/Users/Administrator/Desktop/1.jpg
    3. this->setStyleSheet("QLabel{color:rgb(0,255,255);"
    4. "background-color:white;"
    5. "background-image:url(:/new/prefix1/C:/Users/Administrator/Desktop/1.jpg)}");

    2.label背景

    注意:以上我们是在自己定义的label控件中处理事件,里面不能处理按钮。

            处理:按钮处理事件应该在主页面上实现。

    5.按钮的处理

    1.主页面写

    2.代码

    1. //按键按下
    2. void Widget::keyPressEvent(QKeyEvent *event){
    3. //qDebug() << event->key() << endl;
    4. qDebug() << event->text() << endl;
    5. switch(event->key()){
    6. case Qt::Key_Shift:
    7. isUpper = true;
    8. qDebug() << "Shift" << endl;
    9. break;
    10. case Qt::Key_A:
    11. if(isUpper)
    12. qDebug() << "A" << endl;
    13. else
    14. qDebug() << "a" << endl;
    15. break;
    16. }
    17. }
    18. //按键松开
    19. void Widget::keyReleaseEvent(QKeyEvent *event){
    20. switch(event->key()){
    21. case Qt::Key_Shift:
    22. isUpper = false;
    23. break;
    24. }
    25. }

    3.输出a

    6.定时器的处理

    1.创建

    2.定时器事件处理

    1. Widget::Widget(QWidget *parent)
    2. : QWidget(parent)
    3. , ui(new Ui::Widget)
    4. {
    5. ui->setupUi(this);
    6. progressBarValue = 100;
    7. ui->progressBar->setValue(progressBarValue);
    8. }
    9. //定时器事件处理
    10. void Widget::timerEvent(QTimerEvent *event){
    11. if(progressBarValue>0)
    12. progressBarValue--;
    13. ui->progressBar->setValue(progressBarValue);
    14. }

    3.按钮处理

    1. case Qt::Key_B:
    2. qDebug() << "启动定时器" << endl;
    3. timerId = startTimer(1000);
    4. break;
    5. case Qt::Key_P:
    6. qDebug() << "关闭定时器" << endl;
    7. killTimer(timerId);
    8. break;

    结果:

            按B定时器开始每秒减去1,按P停止定时器

    总结:

            事件进入队列,后事件处理器处理,事件处理器使用自写的事件函数处理。

  • 相关阅读:
    初识Android开发中网络请求报错解决及其总结
    IDEA中JSP创建和小案例
    YOLOv5全面解析教程①:网络结构逐行代码解析
    SpringMVC01、回顾MVC
    springboot大学生就业规划系统毕业设计-附源码191451
    OpenGL 图像色调
    【数据结构】面试OJ题——时间复杂度
    spring boot正常启动之后访问controller下接口报404的解决方案
    《LeetCode力扣练习》代码随想录——二叉树(找树左下角的值---Java)
    C语言volatile 关键字
  • 原文地址:https://blog.csdn.net/m0_61659911/article/details/137864140