qrect的使用 qt_Qt入门系列(三)

本文是Qt入门系列的第三篇,详细介绍了如何使用QRect,包括自定义控件封装、事件处理(鼠标事件、定时器、事件分发器、事件过滤器)、绘图事件和设备的使用,以及文件的读写操作。通过实例讲解了QLabel的鼠标事件响应,QPixmap和QImage的图像处理,QFile和QFileInfo的文件操作等。
摘要由CSDN通过智能技术生成

本文继续:

YYLi-CV:Qt入门系列(二)​zhuanlan.zhihu.com

7.自定义控件封装

增加新的sw.ui界面

选装父文件—>添加文件-->Qt--->设计师界面->命名smallWidget(简称sw)

选择sw.ui->选择Spin Box和Horizontal Slider进行水平布局->但此时运行还是原来的w.ui--》想把sw.ui用在原来w.ui上

查看sw.ui的类型widget-》在w.ui上添加Widget控件-》右键选提升为->把类名复制进去-》点击添加-》点击提升--》运行出现!

现在要实现两者同时移动

自己输入空间查找想要的信号和槽函数Public Slots,如子类中没有,查找父类的槽函数

在sw.cpp中添加代码:

    //QSpingBox移动,QSlider跟着移动
    //因为重载,需要写个函数指针
    void(QSpinBox:: *spSignal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
​
    //反过来
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);

结果显示:

c2c01f9c544a9079fdcb6c2bbda37ce3.png

需求:设置数字和获取数字

在w.ui上添加两个按钮push Botton

在sw.h和sw.cpp中设置接口和实现

//设置数组
void SmallWidget::setNum(int num){
    
    ui->spinBox->setValue(num);
}
//获取数字
int SmallWidget::getNum(){
    
    return ui->spinBox->value();
}

在w.cpp中进行关联

    //获取到控件当前的值
    connect(ui->get,&QPushButton::clicked,[=](){
    
        qDebug() << ui->widget->getNum();
    });
​
    //设置数字
    connect(ui->set,&QPushButton::clicked,[=](){
    
           ui->widget->setNum(50);
    });

结果显示:

f0df9a78dbab290124262fc9c863e90c.png

8.事件

8.1.鼠标事件

->ui.上选择一个Label控件

-》父节点新添加一个class Label(简称l)

在l.h和l.cpp中添加实现:

//鼠标进入事件
void Label::enterEvent(QEvent *event)
{
    
    qDebug()<<"鼠标进入了";
}
//鼠标离开
void Label::leaveEvent(QEvent *)
{
    
    qDebug()<<"鼠标离开了";
}

注意,此时控件与鼠标没有关联,进行关联

把新建的class l改成继承于QLabel。

在Label控件上右键提升为--》Label,生成即可

结果显示:

7cf383d9cbc6fd508b20205ced38a4a2.png

此时需要重写鼠标按下,离开等,在l.cpp中继续添加:

​
//鼠标按下
void Label::mousePressEvent(QMouseEvent *ev)
{
    
    //当鼠标左键按下
   if(ev->button()==Qt::LeftButton)
   {
    
       QString str=QString("鼠标按下,x=%1,y=%2,globalX=%3,globalY=%4").arg(ev->x()).arg(ev->y()).
               arg(ev->globalX()).arg(ev->globalY());
       qDebug()<<str;
   }
​
}
//鼠标释放
 void Label::mouseReleaseEvent(QMouseEvent *ev)
 {
    
    qDebug()<<"鼠标释放";
 }
//鼠标移动
 void Label::mouseMoveEvent(QMouseEvent *ev)
 {
    
     //当鼠标左键按下,区别于按下
    if(ev->buttons() & Qt::LeftButton)
    {
    
        QString str=QString("鼠标按下,x=%1,y=%2,globalX=%3,globalY=%4").arg(ev->x()).arg(ev->y()).
                arg(ev->globalX()).arg(ev->globalY());
        
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值