QT中的事件

QT中的事件

1.tips

1.1如果不知道参数填什么可以打完“( ”之后直接按TAB,系统会自动补全

Qt中的事件

2.1 鼠标事件
2.2 鼠标进入事件 enterEvent(QEvent * ev)
2.3 鼠标离开事件 leaveEvent(QEvent * ev)
2.4 鼠标按下 mousePressEvent(QMouseEvent* ev)
2.5 鼠标释放 mouseReleaseEvent(QMouseEvent
* ev)
2.6 鼠标移动 mouseMoveEvent(QMouseEvent* ev)

ps:如果用不到指针可以不加指针名

2.7 ev->×( )x坐标 ev->y( )y坐标

ev->globalX() //相对屏幕的位置 ev->globalY()//相对屏幕的位置
2.8 ev->button()可以判断所有按键 ,比较对象是Qt::LeftButton Qt::RightButton…
2.9 ev->buttons() 判断组合按键 判断move时候的左右键结合&操作符
2.10 格式化字符串qstring("%1 %2”).arg(111).arg(222)

2.11 设置鼠标追踪状态 setMouseTracking(true);

定时器事件实现(如果需要多个定时器不推荐使用)

3.1 利用事件void timerEvent(QTimerEvent*ev)
3.2 启动定时器 start Timer(1000)毫秒单位
3.3 timerEvent 的返回值是定时器的唯一标示 可以和ev->timerld做比较

比如:

int id1;
id1 = startTimer(1000);//参数1 间隔单位毫秒


void widget::timersvent(grimerEvent * ev)
{
if(ev->timerId()==id1)
{
static int num = 1;
//1abe12每隔1秒+1
ui->labe1_2->setText(Qstring::number(num++));

事件过滤器

6.1在程序将时间分发到事件分发器前,可以利用过滤器做拦截

比如输入数字的对话框不希望有字母输入,可以用过滤器

再比如事件过滤器和定时器结合,实现一段时间不操作自动熄屏或关机等,以达到节能作用

6.2步骤
6.2.11、给控件安装事件过滤器

//给1abe1安装事件过滤器
ui->1abel->installEventFilter(this);//参数是父类指针

6.2.22、重写eventFilter函数(obj,ev)

bool Widget::eventFilter(QObject * obj,QEvent * e)
{
    //如果是...事件,在event事件过滤器中就开始执行
    if(...)
    ...
    .....
        //其他默认处理
        return QWidget::eventFilter(obj,e);
}

绘图事件

7.0包含头文件

#include<QPainter>

7.1绘图事件 void paintEvent()
7.2声明一个画家对象QPainter painter(this) this 指定绘图设备
7.3画线、画圆、画矩形、画文字
7.4设置画笔QPen设置画笔宽度、风格
7.5设置画刷QBrush 设置画刷风格

//设置画笔
QPen pen(Qcolor(25500));
//设置画笔宽度
pen.setwidth(3);
//设置画笔风格
pen.setstyle(Qt::DotLine);
//让画家使用这个笔
painter.setpen(pen);
//设置画刷
QBrush brush(Qt::cyan);
//让画家使用画刷
painer.setBrush();
//画线
painter.drawLine(QPoint(00),QPoint(100,100));
//画圆椭圆
painter.drawE1lipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画文字
painter.drawrext(QRect(10,200,150,50),"好好学习,天天向上");

7.6高级设置

//设置抗锯齿能力效率较低
painter.setRenderHint(QPainter::Antialiasing);//当然还有别的参数可以选,具体看帮助手册
//移动画家
painter.translate(1000);
//保存画家状态
painter.save();
//还原画家保存状态
painter.restore();
//画图片
painter.drawPixmap(0,0,QPixmap(":/路径"));

7.7如果想手动调用绘图事件利用update()更新

QPaintDevice绘图设备

9.1QPixmap Qlmage QBitmap(黑白色)QPicture QWidget
9.2QPixmap 对不同平台做了显示的优化
9.2.1QPixmap pix(300,300)

9.2.2 pix.fil(填充颜色
9.2.3利用画家往pix 上画画QPainter painter(&pix)
9.2.4保存 pix.save(“路径”)
9.3.1使用和QPixmap差不多Qlmage img(300,300,Qlmage::Format_RGB32);
9.3.2其他流程和QPixmap一样
9.3.3可以对像素进行修改 img.setPixeli(i,j,value);
9.4QPicture 记录和重现绘图指令
9.4.1 QPicture pic
9.4.2 painter.begin(&pic);
9.4.3保存pic.save(任意后缀名)
9.4.4重现利用画家可以重现

拖动事件

常见用法:

拖动打开文件或其他,一般要重写事件以扩展自己想要实现的功能

首先,当需要一个控件接收drag和drop,就要先调用控件的方法:setAcceptDrops(True)

以拖动打开文件为例:

void myLabel:: dragEnterEvent(QDragEnterEvent * event){
QString path = event->mimeData()->text(); 
    if(filename.isEmpty()){
	filename = path;
	}
else{
	if(filename != path){
	filename=path;
	}
}

 //在dropEvent中
// this->filename. replace("file://",""); 
// this->filename. replace("\r\n","");
    不要忘记把文件路径的前缀跟后缀去掉
   //this->filename.clear
        还有不要忘记把变量清空以接收下一次的事件

总结:

拖动进入事件:QDragEnterEvent

包含头文件#include、#include

mimeData()->text()字符串类型

mimeData()->data式QByteArray data类型,字符串数组

QDragEnterEvent中的mimeData重写了,它可以把文件的路径以纯文本的形式保存下来

拖动离开事件:QDragLeaveEvent

拖动移动事件:QDragMoveEvent

拖动释放事件:dropEvent

ps:声明全局QString类型的时候要先清空,可以在构造函数里调用clear()函数

2、路径绝对不能有中文!!!

3、附一张逻辑图以便记忆

image-20210818003501899

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hgchshs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值