Почему мои виджеты не отображаются? - PullRequest
0 голосов
/ 14 сентября 2010

Я пытаюсь создать макет, подобный этому

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

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

Ответы [ 2 ]

4 голосов
/ 14 сентября 2010

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

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

Посмотрите документацию по этому поводу: Список стилей для виджетов .

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

QWidget: Поддерживает только фон, background-clip и backgroundсвойства -origin.

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

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 голосов
/ 14 сентября 2010

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

void mainWindow::paintEvent(QPaintEvent *event)
{
setPalette(QPalette(QColor(85, 170, 255)));
setAutoFillBackground(true); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...