• 9019阅读
  • 3回复

[提问]求助,利用setStyleSheet设置子窗口背景有误(附代码)【已解决】 [复制链接]

上一主题 下一主题
离线jiangz3
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-13
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
自定义一个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;");
}
[ 此帖被jiangz3在2010-04-14 09:49重新编辑 ]
离线jiangz3
只看该作者 1楼 发表于: 2010-04-14
问题解决,不过并不清楚细节原因。

解决代码如下:

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);
}

调用代码略。。

运行效果如下:


疑问,这个问题看上去是窗口层次的问题,但是主贴代码中的窗口层次到底在哪里出了问题呢?这个是我没有想清楚的。
离线benbenmajia

只看该作者 2楼 发表于: 2010-04-14
我怎么没看懂在说什么..囧
安然.....
离线jiangz3
只看该作者 3楼 发表于: 2010-04-14
引用第2楼benbenmajia于2010-04-14 11:10发表的  :
我怎么没看懂在说什么..囧


想做一个包含两个文本框的子窗口控件(主贴中的DisplayInfoArea类),然后在主窗口(主贴中的SettingWindow)中显示。

主窗口的背景为黑色,希望设子窗口的背景为另外的颜色。

问题出在:

通过子窗口的指针设置背景色
m_displayAccountInfoArea->setStyleSheet("background-color: #202020;");

显示结果却是设置了子窗口内部那两个文本框的背景色。
快速回复
限100 字节
 
上一个 下一个