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

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

1.事件的位置

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

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

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

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

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

(2)setText进入label中

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

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

复制代码
QString str=QString("<center><h1>移动:%1,%2</h2></center>").
                    arg(event->x()).arg(event->y());
this->setText(str);

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

1.创建图标

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

3.添加鼠标指针图片

4.代码:

复制代码
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
    //是能Mouse的事件,MyLabel::mouseMoveEvent可被事件接受
    this->setMouseTracking(true);
    //(1)从资源中右键--》复制文件路径
    //:/new/prefix1/C:/Users/Administrator/Desktop/5.jpg
    //:/new/prefix1/C:/Users/Administrator/Desktop/6.jpg
    pBitmap1 = new QPixmap(":/new/prefix1/C:/Users/Administrator/Desktop/5.jpg");
    pBitmap2 = new QPixmap(":/new/prefix1/C:/Users/Administrator/Desktop/6.jpg");
    //调整指针的大小
    *pBitmap1 =  pBitmap1->scaled(40,40,Qt::KeepAspectRatio);
    *pBitmap2 =  pBitmap2->scaled(40,40,Qt::KeepAspectRatio);
}
//函数自动创建一个QMouseEvent *event事件,去被事件列表接受
void MyLabel::mouseMoveEvent(QMouseEvent *event){
    qDebug() <<"移动:" << event->x() << "," << event->y() << endl;
    //实现:坐标显示在页面中间
    QString str=QString("<center><h1>移动:%1,%2</h2></center>").arg(event->x()).arg(event->y());
    this->setText(str);
    if(event->x()<=this->width()/2){
        setCursor(QCursor(*pBitmap1));
    }else{
        setCursor(QCursor(*pBitmap2));
    }
}

结果:

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

3.鼠标左键、右键按下

复制代码
void MyLabel::mousePressEvent(QMouseEvent *ev){
    if(ev->button() == Qt::LeftButton)
        qDebug() <<"左键按下"  << endl;
    else if(ev->button() == Qt::RightButton)
        qDebug() <<"右键按下"  << endl;
}

4.qt背景的设置

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

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

2.label背景

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

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

5.按钮的处理

1.主页面写

2.代码

复制代码
//按键按下
void Widget::keyPressEvent(QKeyEvent *event){

    //qDebug() << event->key() << endl;
    qDebug() << event->text() << endl;
    switch(event->key()){
    case Qt::Key_Shift:
        isUpper = true;
         qDebug() << "Shift" << endl;
        break;
    case Qt::Key_A:
        if(isUpper)
            qDebug() << "A" << endl;
        else
            qDebug() << "a" << endl;
        break;
    }
}
//按键松开
void Widget::keyReleaseEvent(QKeyEvent *event){
    switch(event->key()){
    case Qt::Key_Shift:
        isUpper = false;
        break;
    }
}

3.输出a

6.定时器的处理

1.创建

2.定时器事件处理

复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    progressBarValue = 100;
    ui->progressBar->setValue(progressBarValue);

}
//定时器事件处理
void Widget::timerEvent(QTimerEvent *event){
    if(progressBarValue>0)
        progressBarValue--;
    ui->progressBar->setValue(progressBarValue);
}

3.按钮处理

复制代码
    case Qt::Key_B:
        qDebug() << "启动定时器" << endl;
        timerId = startTimer(1000);
        break;
    case Qt::Key_P:
        qDebug() << "关闭定时器" << endl;
        killTimer(timerId);
        break;

结果:

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

总结:

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

相关推荐
乌暮1 小时前
从 `println` 到生产级日志:Spring Boot 日志体系完全指南
java·开发语言·jvm·spring boot·后端·学习·面试
xian_wwq2 小时前
【学习笔记】Milvus 是什么?为什么 RAG 系统经常使用它?-14
笔记·学习·milvus
自信150413057592 小时前
重生之从0开始学习c++之string(下)
c++·学习·stl
kmomo..2 小时前
Linux 驱动开发学习笔记:UART、触摸屏与 ADC 驱动实战
linux·驱动开发·学习
youdexiang3 小时前
如何建立个人学习资料库?
学习
人工智能培训3 小时前
具身智能环境交互与学习范式原理
大数据·linux·人工智能·学习·算法·机器学习
Tj8105233 小时前
企业培训如何真正落地:从组织能力建设到培训ROI评估的完整指南
学习·学习方法
~kiss~3 小时前
LangGraph 和 ToT,Tree of Thoughts 同一步骤多条路线并行探索,用LLM做评判和减枝
学习
艾莉丝努力练剑3 小时前
【AI大模型接入SDK】ChatServer接口设计规范
网络·c++·人工智能·学习·大模型·设计规范
qq_284274054 小时前
电动机控制与PLC入门:自耦减压启动、反接制动与速度继电器KS,及PLC诞生、定义、特点与分类(含考点)
笔记·学习·自动化·制造