2013-07-25 2 views
2

Использование Qt 4.8.4 в Windows 7 (MSVC 2010) У меня есть стандартный QMainWindow в моем приложении с панелью инструментов. Я хочу, чтобы панель инструментов оставалась серой, но центральный виджет должен иметь белый фон. Вызов centralWidget->setStyleSheet("background-color: white;") сначала, казалось, выполнял эту работу, но использование его с помощью созданного конструктором виджета (Q_OBJECT) не является. Впоследствии я играл с другими способами, чтобы установить таблицу стилей (также используя конструктор) безрезультатно.Установить фон центрального виджета QMainWindow

Для этого необходимо добавить или удалить строку Q_OBJECT в test.h. Когда он есть, только метка получает белый 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; }") НЕ РЕШЕТ О проблемах
  • Мне удалось сделать каждый виджет (включая всплывающие диалоги) белым, но это не то, что я хочу.

ответ

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); 
} 
Смежные вопросы