2013-12-08 3 views
4

В настоящее время я использую виджет QMainWindow, и мне бы хотелось удалить поля вокруг виджета внутри. Мне удастся удалить поля для границ окна, но не для виджетов внутри моего окна.Qt удалить поля

Вот мой код, например:

this->mainWidget = new QWidget(this); 
this->mainLayout = new QHBoxLayout; 
QLabel *foo = new QLabel("foo", this); 
QLabel *bar = new QLabel("bar", this); 

mainLayout->setContentsMargins(0, 0, 0, 0); // Remove margins for window borders 

this->setWindowFlags(Qt::FramelessWindowHint); 

foo->setStyleSheet("background-color: green"); 
bar->setStyleSheet("background-color: red"); 
foo->setContentsMargins(0, 0, 0, 0); // Has no effect 
bar->setContentsMargins(0, 0, 0, 0); // Has no effect 

this->mainLayout->addWidget(foo); 
this->mainLayout->addWidget(bar); 

this->mainWidget->setLayout(mainLayout); 
this->setCentralWidget(mainWidget); 

И вот что он оказал:

Window render

Я хотел бы, чтобы удалить белую часть между двумя виджетами.

Есть ли у вас идеи, как это сделать?

спасибо.

+0

Side Примечание: вы используете 'это -> ...' для всех ваших членов обращается за исключением одного (setContentMargin для mainLayout) - либо сделать это для всех, либо ни для кого, но оставляя только тот, у кого нет явной квалификации, выглядит странно - заставляет вас задаться вопросом, говорим ли мы о двух разных вещах или нет. – Mat

+0

см. Также http://stackoverflow.com/questions/9129324/qt-widget-with-layout-space-what-is-it-how-to-remove и http://stackoverflow.com/questions/12017789/removing -extra-spacing-around-qwidget – Trilarion

ответ

5

Вам просто нужно установить атрибут макета коробки spacing к нулю:

this->mainLayout->setSpacing(0); 
+0

Спасибо, это сработало ... Это было так просто, и я не видел ... –

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