C++ QLabel在项委托(QStyledItemDelegate)上呈现时不透明
我有一个奇怪的问题,我让项目委托从QStyledItemDelegate继承 背景色为渐变色,如下所示:C++ QLabel在项委托(QStyledItemDelegate)上呈现时不透明,c++,qt,delegates,C++,Qt,Delegates,我有一个奇怪的问题,我让项目委托从QStyledItemDelegate继承 背景色为渐变色,如下所示: void ItemDelegate::paintActiveOverlay( QPainter* painter, qreal x, qreal y, qrea
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();
}
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);
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);
它是从paint方法调用的,也是在ItemDelegate构造函数中调用的,我将QLabel设置为:
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();
}
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);
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);
在ItemDelegate的paint方法中,我将QLabel设置为如下方式渲染:
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();
}
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);
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被忽略的原因是,我无法对文本执行任何操作。颜色透明度取决于: 颜色的alpha通道指定透明度效果0 表示完全透明的颜色,而255表示完全透明的颜色 不透明的颜色 默认情况下,它是255,因此您应该在正在使用的函数中指定所需的值作为第四个参数
或者,您可以使用该函数。呈现小部件时,始终绘制小部件背景。有一个特殊的渲染标志来禁用小部件背景的渲染
qwidget api手册中对此进行了解释。是的,我使用了:QPalette pptexEdit_title->palette;//将背景颜色设置为黑色p.setColorQPalette::background,Qt::transparent;pTextEdit_title->setPalettep;还是灰色的背景…我该怎么做?我没有找到任何教程?我尝试实现以下内容:。但它仍然是灰色的,我怀疑这与我设置的项目背景颜色有关