qt实验室之——实现不同形状的QLabel

1 效果显示

东南西北为四个不同形状三角形的QLabel,并附带鼠标左键单机效果
在这里插入图片描述
点击东南西北不同的板块label,产生不同的效果。
在这里插入图片描述

2 实现代码

在widget 的构造函数中

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //图像显示
QPixmap label8(":/img/bei.png");
   // label8.scaled(ui->label_8->size(), Qt::IgnoreAspectRatio);
   // ui->label_8->setScaledContents(true);
    ui->label_8->setPixmap(label8);
    ui->label_8->setFixedSize(label8.size());
    //qDebug()<<"label8:"<<ui->label_8->height()<<ui->label_8->width();
    ui->label_8->setMask(label8.mask()); //遮罩
   ui->label_8->setGeometry(150, 190, ui->label_8->width(), ui->label_8->height());

    QPixmap label9(":/img/nan.png");
//    label9.scaled(ui->label_9->size(), Qt::IgnoreAspectRatio);
//    ui->label_9->setScaledContents(true);
    ui->label_9->setPixmap(label9);
    ui->label_9->setFixedSize(label9.size());
    //qDebug()<<"label9:"<<ui->label_9->height()<<ui->label_9->width();
    ui->label_9->setMask(label9.mask()); //遮罩
   ui->label_9->setGeometry(239, 195, ui->label_9->width(),ui->label_9->height());

    QPixmap label10(":/img/xi.png");
   // label10.scaled(ui->label_10->size(), Qt::IgnoreAspectRatio);
   // ui->label_10->setScaledContents(true);
    ui->label_10->setPixmap(label10);
   ui->label_10->setFixedSize(label10.size());
    //qDebug()<<"label10:"<<ui->label_10->height()<<ui->label_10->width();
   ui->label_10->setMask(label10.mask()); //遮罩
   ui->label_10->setGeometry(158, 191, ui->label_10->width(),ui->label_10->height());

    QPixmap label11(":/img/dong.png");
   // label11.scaled(ui->label_11->size(), Qt::IgnoreAspectRatio);
    //ui->label_11->setScaledContents(true);
    ui->label_11->setFixedSize(label11.size());
   // qDebug()<<"label11:"<<ui->label_11->height()<<ui->label_11->width();
    ui->label_11->setPixmap(label11);
    ui->label_11->setMask(label11.mask()); //遮罩
    ui->label_11->setGeometry(156, 276, ui->label_11->width(),ui->label_11->height());
	
	//安装事件过滤器
    ui->label_8->installEventFilter(this);
    ui->label_9->installEventFilter(this);
    ui->label_10->installEventFilter(this);
    ui->label_11->installEventFilter(this);
}

事件过滤器(变量l为类中的数据成员)

bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
   if(obj == ui->label_8){//北
        if(event->type() == QEvent::MouseButtonPress){
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            if(mouseEvent->button() == Qt::LeftButton){
                l += 1;
                qDebug()<<"l:"<<l;
                 return  true;
            }else{
                return false;
            }

        }else{
            return false;
        }
    }else if(obj == ui->label_9){//南
        if(event->type() == QEvent::MouseButtonPress){
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            if(mouseEvent->button() == Qt::LeftButton){
                l += 3;
                qDebug()<<"l:"<<l;
                 return  true;
            }else{
                return false;
            }

        }else{
            return false;
        }
    }else if(obj == ui->label_10){//西
        if(event->type() == QEvent::MouseButtonPress){
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            if(mouseEvent->button() == Qt::LeftButton){
                l += 5;
                qDebug()<<"l:"<<l;
                 return  true;
            }else{
                return false;
            }

        }else{
            return false;
        }
    }else if(obj == ui->label_11){//东
        if(event->type() == QEvent::MouseButtonPress){
            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
            if(mouseEvent->button() == Qt::LeftButton){
                l += 7;
                qDebug()<<"l:"<<l;
                 return  true;
            }else{
                return false;
            }

        }else{
            return false;
        }
    }else {
        return  QWidget::eventFilter(obj, event);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

繁星蓝雨

如果觉得文章不错,可以请喝咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值