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

server/2024/10/11 6:45:56/

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.jpgpBitmap1 = 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;elseqDebug() << "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停止定时器

总结:

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


http://www.ppmy.cn/server/6210.html

相关文章

无法连接到MongoDB Atlas 的Cloud Database

打开Mongodb网页: 选择允许任何地址连接 连接成功

hyref 开发者推荐项目

GitHub - limingxinleo/phalcon: phalcon项目结构 GitHub - fan3750060/wpcore: php , swoole, wow, wowcore, World of Warcraft,master> wow_3.3.5a(Can not work normally) ,branch>wow_2.4.3_8606

车轮上的智能:探索机器学习在汽车行业的应用前景

文章目录 引言&#xff1a;一、机器学习在汽车设计中的应用设计优化模拟与测试 二、智能制造与生产三、自动驾驶技术感知与决策数据融合 四、市场与模式的变革五、机器学习对于汽车行业的机遇与挑战挑战机遇 引言&#xff1a; 在当今数字化时代&#xff0c;机器学习作为人工智…

Unity UGUI透明区域点击无效

是这样的&#xff0c;我有一张图&#xff0c;客户给的是1920*1080&#xff0c;但只有中间部分是按钮&#xff0c;是有效像素。为了让空白区域点击无效。需要设置如下 并且加上下面这句 this.GetComponent<Image>().alphaHitTestMinimumThreshold 0.1f;

多语言vue-i18n (vue2,uniapp)

安装vue-i18n npm install vue-i18n8 --save // npm install vue-i18n–save 9版本需要vue3.0 // 在vue2环境下&#xff0c;默认安装 npm install vue-i18n 的版本是 vue-i18n9.2.2&#xff0c; // 报错信息里提示这个版本要求是vue3&#xff0c;所以我们安装适合vue2版本的vu…

Android活动之Intent

Intent Intent是Android程序中各组件之间进行交互的一种重要方式&#xff0c;它不仅可以指明当前组件想要执行的动作&#xff0c;还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景&#xff0c; 显示intent 第一个参数Context要求提供…

从 Android 恢复已删除文件的 3 种简单方法

如何从 Android 恢复已删除的文件&#xff1f;毫不犹豫&#xff0c;有些人可能会认为从 Google 备份恢复 Android 文件太容易了。但是&#xff0c;如果删除的文件未同步到您的帐户或未备份怎么办&#xff1f;您错误的恢复可能会永久删除您想要的数据。因此&#xff0c;我们发布…

Redis(二) 单线程架构

redis 的单线程架构 我们都知道 redis 作为缓存&#xff0c;读取速度是非常快的&#xff0c;但是大家知道 redis 的线程架构是怎样的呢&#xff1f;也就是说&#xff0c;redis 是多线程架构还是单线程架构呢&#xff1f; 我们通过一个例子来了解&#xff1a; 首先在 redis 服…