标题:求助,利用setStyleSheet设置子窗口背景有误(附代码)【已解决】
作者:jiangz3
日期:2010-04-13 16:17
内容:
自定义一个Widget,内包含两个Label。
想要设置Widget整体的背景色
目标图如附件sample2.jpg
实际执行效果如附件图sample.jpg
仅仅设置了内部包含的两个Label的背景色。
构造函数代码如下:
DisplayInfoArea::DisplayInfoArea(QWidget *parent)
: QWidget(parent),
label1(0),
label2(0)
{
this->setAutoFillBackground(true); // 这行加或不加没有明显影响。
QVBoxLayout *mainLayout = new QVBoxLayout(this);
label1 = new QLabel(str1, this);
label1->setGeometry(10, 10, 200, 80);
QFont myFont("Times", 12, QFont::Light, FALSE);
label1->setFont(myFont);
label2 = new QLabel(str2, this);
label2->setGeometry(10, 100, 200, 80);
label2->setFont(myFont);
mainLayout->addWidget(label1);
mainLayout->addWidget(label2);
setLayout(mainLayout);
}
函数调用代码如下:
void SettingWindow::initDisplayArea()
{
QLabel *AccountTitle = new QLabel(tr("Account"), this);
AccountTitle->setGeometry(20, 0, 100, 20);
m_displayAccountInfoArea = new DisplayInfoArea(this);
m_displayAccountInfoArea->setGeometry(20, 20, 300, 160);
QString str(tr("424242424"));
m_displayAccountInfoArea->updateInfo(str, str);
QLabel *PhoneTitle = new QLabel(tr("Phone"), this);
PhoneTitle->setGeometry(20, 190, 100, 20);
// 以下是调用自定义的窗口代码:
m_displayPhoneInfoArea = new DisplayInfoArea(this);
m_displayPhoneInfoArea->setGeometry(20, 220, 300, 160);
m_displayPhoneInfoArea->updateInfo(str, str);
const QString str3 = QString("background - color: #FFFFBB;" "border - radius: 5px;");
m_displayAccountInfoArea->setStyleSheet("background-color: #202020;");
}
#1 [jiangz3 04-14 09:56]
问题解决,不过并不清楚细节原因。
解决代码如下:
DisplayInfoArea::DisplayInfoArea(QWidget *parent)
: QWidget(parent),
containerWidget(0),
label1(0),
label2(0)
{
this->setAutoFillBackground(false);
QVBoxLayout *mainLayout = new QVBoxLayout;
containerWidget = new QWidget(this); // 加入一层Widget,Parent设为this, 然后以加入的Widget为parent, new 新的Label。
containerWidget->setGeometry(this->geometry());
label1 = new QLabel(containerWidget);
label1->setGeometry(10, 10, 200, 80);
QFont myFont("Times", 12, QFont::Light, FALSE);
label1->setFont(myFont);
label2 = new QLabel(containerWidget);
label2->setGeometry(10, 100, 200, 80);
label2->setFont(myFont);
mainLayout->addWidget(label1);
mainLayout->addWidget(label2);
setLayout(mainLayout);
}
调用代码略。。
运行效果如下:
疑问,这个问题看上去是窗口层次的问题,但是主贴代码中的窗口层次到底在哪里出了问题呢?这个是我没有想清楚的。
#2 [benbenmajia 04-14 11:10]
我怎么没看懂在说什么..囧
#3 [jiangz3 04-14 14:07]
引用第2楼benbenmajia于2010-04-14 11:10发表的:
我怎么没看懂在说什么..囧
想做一个包含两个文本框的子窗口控件(主贴中的DisplayInfoArea类),然后在主窗口(主贴中的SettingWindow)中显示。
主窗口的背景为黑色,希望设子窗口的背景为另外的颜色。
问题出在:
通过子窗口的指针设置背景色
m_displayAccountInfoArea->setStyleSheet("background-color: #202020;");
显示结果却是设置了子窗口内部那两个文本框的背景色。