2010-09-14 6 views
0

Я пытаюсь создать макет как этогоПочему мои виджеты не отображаются?

enter image description here

В QT я создал виджеты и положить в главном виджете, проблема не видна. ни один из виджета не отображается. Пожалуйста, помогите мне решить эту проблему

Полный исходный код sandbox.ifuturemec.com/test.zip

Исходный код mainwindow.cpp

#include "mainwindow.h" 
#include <QtGui> 
#include "headerbar.h" 
#include <QGridLayout> 
#include <QPushButton> 
#include <QBoxLayout> 
#include "statusbar.h" 
#include "leftpanel.h" 
#include "rightpanel.h" 
#include "centerpanel.h" 

mainWindow::mainWindow(QWidget *parent) : QWidget(parent) 
{ 
    QGridLayout *layout=new QGridLayout(this); 

    headerBar *Header= new headerBar(this); 
    leftPanel *LeftPanel=new leftPanel(this); 
    centerPanel *CenterPanel=new centerPanel(this); 
    rightPanel *RightPanel=new rightPanel(this); 
    statusBar *Status=new statusBar(this); 

    QHBoxLayout *box=new QHBoxLayout(); 
    box->addWidget(LeftPanel); 
    box->addWidget(CenterPanel); 
    box->addWidget(RightPanel); 

    layout->addWidget(Header,0,0); 
    layout->addLayout(box,1,0); 
    layout->addWidget(Status,2,0); 

    setLayout(layout); 
} 

mainWindow::~mainWindow() {} 

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QWidget> 

class mainWindow : public QWidget 
{ 
    Q_OBJECT 
public: 
    mainWindow(QWidget *parent = 0); 
    ~mainWindow(); 

signals: 

public slots: 

}; 

#endif // MAINWINDOW_H 

headerbar.cpp

#include "headerbar.h" 
#include <QPushButton> 
#include <QMessageBox> 

headerBar::headerBar(QWidget *parent) : QWidget(parent) 
{ 
    this->setMaximumHeight(24); 
    this->setStyleSheet("background-color: rgb(85, 170, 255)"); 
} 

headerBar::~headerBar(){} 

headerbar.h

#ifndef HEADERBAR_H 
#define HEADERBAR_H 

#include <QWidget> 

class headerBar : public QWidget 
{ 
    Q_OBJECT 
public: 
    headerBar(QWidget *parent = 0); 
    ~headerBar(); 

signals: 

public slots: 

}; 

#endif // HEADERBAR_H 

Пожалуйста, помогите мне решить эту проблему.

ответ

4

Собственно, ваши виджеты do показать! Но они пустые и им нечего показать!

Что касается цвета фона, который вы устанавливаете: свойство background-color не отображается, так как это свойство не поддерживается QWidget.

Посмотрите документацию по этому вопросу: List of stylable widgets.

Более конкретно:

QWidget: Поддерживает только фон, фон-клип и свойства фона происхождения.

Если вы пытаетесь поставить, например, метку в ваших виджетов, вы увидите, что они делают шоу:

centerPanel::centerPanel(QWidget *parent) : 
    QWidget(parent) 
{ 
    QHBoxLayout *box = new QHBoxLayout(this); 
    QLabel* pLabel = new QLabel("Center panel", this); 
    box->addWidget(pLabel); 
    this->setStyleSheet("background-color: rgb(85, 100, 100)"); 
} 

alt text

+0

Спасибо. работает. но мне нужно исправить этот макет, а виджет также должен отображаться в полноэкранном режиме. Пожалуйста, дайте некоторое предложение. – saravanan

0

Если вы просто хотите, чтобы mainWindow иметь сплошной цвет фона, вы можете просто забыть использовать таблицу стилей и переопределить метод paintEvent следующим образом:

void mainWindow::paintEvent(QPaintEvent *event) 
{ 
setPalette(QPalette(QColor(85, 170, 255))); 
setAutoFillBackground(true); 
} 
+0

Мне нужно поставить изображение в качестве фона для виджета. я не хочу сплошной цвет. Я новичок в QT. пожалуйста, дайте некоторое предложение. Мне нужно создать изображение во время выполнения и поместить это изображение в качестве фона. – saravanan

+0

'QFrame' может быть тем, что вы ищете, по крайней мере он поддерживает свойство background-image: http://doc.trolltech.com/4.6/stylesheet-examples.html#customizing-qframe – teukkam

Смежные вопросы