Qlabel

Qlabel

简介

顾名思义,是由QT提供的一个标签类,可以包含以下几种内容。
·使用setText()设置QString文本或者富文本内容。
·使用setPixmap()设置一个图像(需要事先定义pixmap)。
·使用setNum()设置一个数字型内容,将其转换为纯文本。
·使用setMovie()设置一个动画。

常用接口

·setStyleSheet()设置样式
·setAligment(Qt::AlignCenter)设置对齐格式(居中对齐)。
·setWordWrap(true)自动换行,根据空格换行。
换行后,可以通过设置行高。
以下为代码示例:

pLabel->setWordWrap(true);
QString Str = QStringLiteral("这是第一句话,这是第二句话,这是第三句话")
QString StrHeight = "<p style=\"line-height:%1%\">%2<p>";
Str = StrHeight.arg(150).arg(strText);//%1、%2对应此处的150,strText
pLabel->setText(strText);

设置图像
QPixmap Photo(图片路径);
pLabel->setPixmap(Photo);
pLabel->setFixedSize(100,100);
pLabel->setScaledContents(true);//动态图平滑缩放

各种操作

1、切割为圆形

class MyPixmap : public QPixmap
{
public:
    MyPixmap();
    static QPixmap pixmapToRound(QPixmap &src, int radius);
};
QPixmap MyPixmap::pixmapToRound(QPixmap &src, int radius)
{
    if (src.isNull())
    {
        return QPixmap();
    }

    QPixmap pixmapa(src);
    QPixmap pixmap(radius,radius);
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
    QPainterPath path;
    path.addEllipse(0, 0, radius, radius);
    painter.setClipPath(path);
    painter.drawPixmap(0, 0, radius, radius, pixmapa);

    return pixmap;
}
QLabel PixLabel;
QPixmap testPixmap=QPixmap(QPixmap::fromImage(QImage(img));
QPixmap RoundPix = testPixmap->scaled(200,200,Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//200为切割后的圆直径
RoundPix=MyPixmap::pixmapToRound(RoundPix,100);//100为切割后的圆半径
PixLabel->setPixmap(RoundPix);
PixLabel->setScaledContents(true);
PixLabel->setMaximumSize(100,100);

2、重绘事件使图片放大

需要继承QLabel

void paintEvent(QPaintEvent *event) override;
void MyImgWin::paintEvent(QPaintEvent *event)
{
    QLabel::paintEvent(event);
    QPainter paint(this);
    if(!img->isNull())
    {
        if(img->size().width()<0) return;
        QRect target(0, 0, ImgWinW,ImgWinH); //建立目标矩形,该区域是显示图像的目的地,ImgWinW和H指定图片的宽高
        //改变ImgWinW和H不会显示窗口的大小,而是对得到的画面进行缩放,缩放中心点为(x,y)
        //QRect source(0, 0, img->size().width(),img->size().height()); //建立源矩形,用来划定来自外部的源图像文件中需要显示的区域
        paint.drawImage(target,*img);
    }

    QPen pen;
    pen.setColor(Qt::black);
    pen.setWidth(8);
    paint.setPen(pen);
    paint.drawRect(this->rect());
}

target在label生成的区域我用手绘应该形象的表达了出来

3、定义Label点击事件
如果可以将label换成Button更好,使用系统信号Clicked直接解决。如果就要使用label的话,则可以重写label的点击事件
·需要继承QLabel

void mousePressEvent(QMouseEvent *event) override;
void MyImgWin::mousePressEvent(QMouseEvent *event)
{
    //需要实现的内容
}

·给label添加事件过滤器,在过滤器中进行操作

//.h文件中声明
bool eventFilter(QObject *obj, QEvent *ev);
//.cpp
bool testWidget::eventFilter(QObject *obj, QEvent *ev)
{
    if(obj == label_1)
    {
        if(ev->type() == QEvent::MouseButtonPress)
        {
            qDebug()<<"监测到单击";
            //单击要做的事情
            return true;    //事件到此为止,不再需要其他来处理了。
        }
    }
    return QWidget::eventFilter(obj, ev); // 事件继续广播出去,按照普通的方式去处理这个事件。
}
QLabel label_1;
label_1->installEventFilter(this);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值