我有奇怪的问题我有项目委托从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被忽略了我不能对文本做任何事情。
答案 0 :(得分:0)
颜色透明度取决于alpha
channel:
颜色的Alpha通道指定透明效果,0 表示完全透明的颜色,而255表示完全透明 不透明的颜色。
默认情况下为255,因此您应该在所使用的fromHsv
函数中指定所需的值作为第四个参数。
或者,您可以使用setAlpha
功能。
答案 1 :(得分:0)
渲染小部件时,始终会绘制小部件背景。有一个特殊的渲染标志可以禁用窗口小部件背景的渲染。
qwidget api手册中对此进行了解释。