C++ 为什么不';我的小部件不能显示吗?

C++ 为什么不';我的小部件不能显示吗?,c++,qt,qt4,C++,Qt,Qt4,我正在尝试创建这样的布局 在QT中,我创建了小部件并将其放在主小部件中,问题是不可见的。没有一个小部件不显示。请帮我解决这个问题 完整的源代码 sandbox.ifuturemec.com/test.zip 源代码 mainWindow.cpp #include "mainwindow.h" #include <QtGui> #include "headerbar.h" #include <QGridLayout> #include <QPushButton>

我正在尝试创建这样的布局

在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”
#包括
#包括“headerbar.h”
#包括
#包括
#包括
#包括“statusbar.h”
#包括“leftpanel.h”
#包括“rightpanel.h”
#包括“centerpanel.h”
mainWindow::mainWindow(QWidget*父项):QWidget(父项)
{
QGridLayout*layout=新的QGridLayout(本);
头杆*头杆=新头杆(本);
leftPanel*leftPanel=新的leftPanel(此);
centerPanel*centerPanel=新的centerPanel(此);
rightPanel*rightPanel=新的rightPanel(此);
状态栏*状态=新状态栏(此);
QHBoxLayout*box=新的QHBoxLayout();
框->添加小部件(左面板);
框->添加小部件(中心面板);
框->添加小部件(右面板);
布局->添加小部件(标题,0,0);
布局->添加布局(框,1,0);
布局->添加小部件(状态,2,0);
设置布局(布局);
}
mainWindow::~mainWindow(){}
主窗口

#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
\ifndef主窗口
#定义主窗口
#包括
类主窗口:公共QWidget
{
Q_对象
公众:
主窗口(QWidget*父窗口=0);
~main窗口();
信号:
公众时段:
};
#endif//main窗口
校长

#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”
#包括
#包括
headerBar::headerBar(QWidget*parent):QWidget(parent)
{
此->设置最大高度(24);
这->设置样式表(“背景色:rgb(85170255)”;
}
headerBar::~headerBar(){}
头巾

#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
\ifndef HEADERBAR\u H
#定义标题栏
#包括
类标题栏:公共QWidget
{
Q_对象
公众:
标题栏(QWidget*parent=0);
~headerBar();
信号:
公众时段:
};
#endif//HEADERBAR\u H
请帮我解决这个问题。

事实上,您的小部件确实显示了!但是它们是空的,没有什么可展示的

关于您正在设置的背景色:
background color
属性不显示,因为
QWidget
不支持此属性

请查看与此相关的文档:

更具体地说:

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

事实上,您的小部件确实可以显示!但是它们是空的,没有什么可展示的

关于您正在设置的背景色:
background color
属性不显示,因为
QWidget
不支持此属性

请查看与此相关的文档:

更具体地说:

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

如果您只想让
主窗口具有纯色背景,您可以尝试忘记使用样式表,并像下面这样覆盖paintEvent方法:

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

如果您只希望
main窗口
具有纯色背景,您可以尝试忘记使用样式表,并像下面这样覆盖paintEvent方法:

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

谢谢它起作用了。但我需要修复这个布局,没有小部件也应该全屏显示。请给出一些建议。谢谢。它起作用了。但我需要修复这个布局,没有小部件也应该全屏显示。请给出一些建议。我需要把图像作为背景的小部件。我不要纯色。我是新来的。请提出一些建议。我需要在运行时创建图像,并将该图像作为背景。
QFrame
可能就是您要查找的,至少它支持background image属性:我需要将图像作为小部件的背景。我不要纯色。我是新来的。请提出一些建议。我需要在运行时创建图像并将该图像作为背景。
QFrame
可能是您要查找的,至少它支持background image属性: