我正在尝试创建这样的布局
在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
请帮我解决这个问题。
答案 0 :(得分:4)
实际上,你的小部件做显示!但它们是空的,无需展示!
关于您要设置的背景颜色: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)");
}
答案 1 :(得分:0)
如果您只是希望mainWindow
具有纯色背景,您可能会尝试忘记使用样式表并覆盖paintEvent方法,如下所示:
void mainWindow::paintEvent(QPaintEvent *event)
{
setPalette(QPalette(QColor(85, 170, 255)));
setAutoFillBackground(true);
}