文章目录

  • ​​1 效果显示​​
  • ​​2 实现代码​​

1 效果显示

东南西北为四个不同形状三角形的QLabel,并附带鼠标左键单机效果

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

点击东南西北不同的板块label,产生不同的效果。

qt实验室之——实现不同形状的QLabel_遮罩层_02

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);
}
}