2013-07-25 34 views
2

在Windows 7上使用Qt 4.8.4(MSVC 2010)我的應用程序中有一個標準的QMainWindow帶有工具欄。我希望工具欄保持灰色,但中央小部件應該有白色背景。起初調用centralWidget->setStyleSheet("background-color: white;")似乎完成了這項工作,但將其與設計器生成的小部件(Q_OBJECT)一起使用不會。隨後我玩弄了各種其他方法來設置樣式表(也使用Designer)無濟於事。設置QMainWindow中央部件的背景

要查看此效果,請在test.h中添加或刪除Q_OBJECT行。當它在那裏,只有標籤得到一個白色的BG。如果Q_OBJECT被註釋掉,整個中心部件是白色的。當然,我想整個區域都是白色的,但也需要Q_OBJECT

這裏的文件:

main.cpp中:

#include "test.h" 

class testwin : public QMainWindow { 
public: 
    QWidget  *centralWidget; 
    QToolBar *mainToolBar; 

    testwin(QWidget *parent = 0) : QMainWindow(parent) { 
     centralWidget = new test(this); 
     setCentralWidget(centralWidget); 
     mainToolBar = new QToolBar(this); 
     this->addToolBar(Qt::TopToolBarArea, mainToolBar); 
    }; 

    ~testwin() {}; 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    testwin w; 
    w.centralWidget->setStyleSheet("background-color: white;"); 
    w.show(); 
    return a.exec(); 
} 

test.h:

#include <QtGui> 

class test : public QWidget 
{ 
    Q_OBJECT // remove this 

public: 
    QLabel *label; 

    test(QWidget *parent = 0) { 
     resize(400, 300); 
     label = new QLabel(this); 
     label->setText("Test"); 
    }; 
}; 

狀態更新:

  • setStyleSheet("QWidget { background-color: white; }")不解決問題
  • 我成功地讓每個Widget(包括彈出對話框)變成白色,但那不是我想要的。

回答

3

確定,適當的答案可以發現here,或者可替換地通過讀取文檔。我需要實現的paintEvent我的測試類:

class test : public QWidget 
{ 
    Q_OBJECT // remove this 

public: 
    QLabel *label; 

    test(QWidget *parent = 0) { 
     resize(400, 300); 
     label = new QLabel(this); 
     label->setText("Test"); 
    }; 

    void paintEvent(QPaintEvent *) 
    { 
     QStyleOption opt; 
     opt.init(this); 
     QPainter p(this); 
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); 
    } 

}; 

也非常感謝1 + 1 = 2,在誰讀the Qt project forum手冊我。

2
w.centralWidget->setStyleSheet("QWidget { background-color: white; }"); 
+0

並沒有幫助 - 同樣的行爲,灰色背景上的白色標籤:( – Batox

1

有一個更好的方法來做到這一點。

如您所知,每個QMainWindow都有一箇中央控件,默認情況下名稱爲centralwidget

所以解決這個問題的最好方法是改變那個小部件的背景。

當我們使用樣式表時,這很簡單。在這種情況下,將是以下一個:

#centralwidget { 
    background-color: rgb(0, 0, 0); 
}