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