当我正在使用已应用样式的QLabel时,我遇到了这种情况。每当我尝试更换背景颜色时,我都无法这样做,因为它在某种程度上是透明的。我试图不对背景进行硬编码,而是应用样式。这是代码和一些解释:
#include "fccLabel.h"
FccLabel::FccLabel(QWidget* parent) : QLabel(parent)
{
this->setFrameStyle(QFrame::StyledPanel);
this->setStyleSheet("border: 2px solid gray; border-radius: 3px;");
}
void FccLabel::SetBackColor(quint32 c)
{
QPalette p;
p = this->palette();
this->setAttribute(Qt::WA_TranslucentBackground, false);
this->setAutoFillBackground(true);
p.setColor(backgroundRole(), QColor(c));
this->setPalette(p);
this->update();
}
void FccLabel::SetTextColor(quint32 c)
{
QPalette p;
p = this->palette();
p.setColor(QPalette::WindowText, QColor(c));
this->setPalette(p);
this->update();
}
,头文件是:
#ifndef FCCLABEL_H
#define FCCLABEL_H
#include <QObject>
#include <QLabel>
#include <QFont>
class FccLabel : public QLabel
{
Q_OBJECT
public:
FccLabel(QWidget* parent = 0);
void SetBackColor(quint32 c);
void SetTextColor(quint32 c);
};
#endif // FCCLABEL_H
使用此代码,文本着色工作正常,但标签保持透明(不受影响)。如果我评论这两行:
this->setFrameStyle(QFrame::StyledPanel);
this->setStyleSheet("border: 2px solid gray; border-radius: 3px;");
背景颜色发生变化。
我也试着做下一步,而没有评论上面的几行:
this->setStyleSheet("background-color: Qt::red;");
背景颜色发生了变化,但是,我再次失去了所有其他样式元素。
我做错了什么?还有其他我可以尝试的东西吗?