【问题标题】:QLabel border won't display with pixmapQLabel 边框不会与像素图一起显示
【发布时间】:2015-05-04 14:44:52
【问题描述】:

我可以在QLabels 上显示一个边框就好了:

但是当我尝试在其中显示像素图时,边框消失了:

我在 QLabel 子类的构造函数中设置了框架属性:

ObjectSlot::ObjectSlot(int index) {
    setIndex(index);

    setFrameShape(QFrame::StyledPanel);
    setFrameShadow(QFrame::Raised);
    setLineWidth(3); 
    setMidLineWidth(3);

    setAlignment(Qt::AlignCenter);
    return;
}

像素图设置在paintEvent:

void ObjectSlot::paintEvent(QPaintEvent* event) {
    QPixmap* image = new QPixmap("://images/Box.png");
    setPixmap(image->scaled(width(),height(),Qt::KeepAspectRatio));
    QLabel::paintEvent(event);
}

为什么边界消失了?为什么生活如此残酷?

【问题讨论】:

  • 边框不会因为你看不到而消失,因为像素图占用了框架的大小。
  • @NanaOsaberima 使用 alpha 通道图像也没有边框,所以可能不是问题。
  • 我尝试使用较小的像素图并遇到了同样的问题。

标签: c++ qt qlabel


【解决方案1】:

正如医生所说:

设置像素图会清除之前的所有内容。伙伴快捷方式,如果 any, 被禁用。

所以看起来不可能,但我找到了下一个解决方案,你不应该setPixmap(),你只需要drawPixmap(),当所有正确的标签都被绘制时:

void ObjectSlot::paintEvent(QPaintEvent *e)
{
    QLabel::paintEvent(e);
    //label painted
    QPainter p(this);
    QPixmap image("G:/2/qt.png");
    p.drawPixmap(QPoint(1,1),image.scaled(100,100,Qt::KeepAspectRatio));
}

结果:

不是最好的解决方案,因为您应该根据自己的目的对其进行调整,但目前总比没有好。

【讨论】:

  • 这很好用,谢谢!不过,必须指定像素有点麻烦 :)
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多