在项目委托(QStyledItemDelegate)上呈现时,QLabel不透明

时间:2012-01-12 22:21:35

标签: c++ qt delegates

我有奇怪的问题我有项目委托从QStyledItemDelegate继承 背景颜色是渐变颜色,如下所示:

void ItemDelegate::paintActiveOverlay( QPainter* painter,
                                       qreal x,
                                       qreal y,
                                       qreal w,
                                       qreal h ) const 
{
    QPalette palette;
    QColor highlightColor = palette.color(QPalette::Highlight);
    QColor backgroundColor = palette.color(QPalette::Base);
    const float animation = 0.25;
    const int gradientRange = 16;

    QColor color2 = QColor::fromHsv(
        highlightColor.hue(),
        (int) (backgroundColor.saturation() * (1.0f - animation) + 
        highlightColor.saturation() * animation),
        (int) (backgroundColor.value() * (1.0f - animation) + 
        highlightColor.value() * animation) );

    QColor color1 = QColor::fromHsv(
        color2.hue(),
        qMax(color2.saturation() - gradientRange, 0),
        qMin(color2.value() + gradientRange, 255) );

    QRect rect( (int)x, (int)y, (int)w, (int)h);

    painter->save();
    painter->setPen(Qt::NoPen);

    QLinearGradient linearGradient(0, 0, 0, rect.height());
    linearGradient.setColorAt(0.0, color1);
    linearGradient.setColorAt(1.0, color2);

    painter->setBrush(linearGradient);
    painter->drawRect(rect);
    painter->restore();
}

我在ItemDelegate构造函数中也使用paint方法调用它,如下所示QLabel

 QRect rect(40, 30, 401, 31);
 Qt::TextInteractionFlags flags =     
      Qt::LinksAccessibleByKeyboard | 
      Qt::LinksAccessibleByMouse    |
      Qt::TextBrowserInteraction    |
      Qt::TextSelectableByKeyboard  |
      Qt::TextSelectableByMouse;
 Qt::TextFormat txtFormat = Qt::PlainText;

 pTextEdit_title = new QLabel();
 pTextEdit_title->setTextFormat(txtFormat);
 pTextEdit_title->setTextInteractionFlags(flags);
 pTextEdit_title->setGeometry(rect);

并在ItemDelegate的paint方法中设置QLabel以这样呈现:

  pTextEdit_title->setText(Title);
  QRect TextEditRect(option.rect.x()+THUMB_WIDTH+THUMB_WIDTH+PADDING, option.rect.y() ,
  pTextEdit_title->width(), pTextEdit_title->height());
  QPixmap pixmap(pTextEdit_title->size());
  pTextEdit_title->render(&pixmap);
  painter->drawPixmap(TextEditRect,pixmap);

它呈现QLabel文件,但问题是它有灰色背景而不是透明背景,我的问题是如何将QLabel背景设置为透明?
也为什么TextInteractionFlags我设置bean被忽略了我不能对文本做任何事情。

2 个答案:

答案 0 :(得分:0)

颜色透明度取决于alpha channel

的值
  

颜色的Alpha通道指定透明效果,0   表示完全透明的颜色,而255表示完全透明   不透明的颜色。

默认情况下为255,因此您应该在所使用的fromHsv函数中指定所需的值作为第四个参数。

或者,您可以使用setAlpha功能。

答案 1 :(得分:0)

渲染小部件时,始终会绘制小部件背景。有一个特殊的渲染标志可以禁用窗口小部件背景的渲染。

qwidget api手册中对此进行了解释。