Как сделать свободное пространство вокруг бескаркасного QWidget?

Я сделал собственное окно в Qt и теперь столкнулся с проблемой изменения размера.

Мне нужно свободное пространство вокруг моего QWidget (Qt::FramelessWindowHint), чтобы я мог обрабатывать события Mouse Hover+Leave+Press+Release в этой области, и в этих событиях я изменяю форму курсора и изменяю размер виджета. (Я не хочу mouseEvent для виджета, но для этого пространства)

Как я мог получить такую ​​площадь?


person IMAN4K    schedule 01.05.2016    source источник


Ответы (1)


Я полагаю, что ваш QWidget в какой-то момент добавляется к QLayout. Затем просто попросите содержащий QLayout зарезервировать свободное пространство вокруг своего содержимого, вызвав [setContentsMargins].

Пример, у вас было:

QWidget* widget = new QWidget( parent );
parent->layout()->addWidget( widget );

Затем просто добавьте:

parent->layout()->setContentsMargins( 100,100,100,100 );

Это гарантирует, что вокруг widget будет 100 пикселей пустой области.

Чтобы быть более общим, и в случае, если у вас не было родителя, вы можете создать промежуточный QWidget следующим образом:

Ты имел:

QWidget* myWidget = new QWidget( NULL );
widget->show();

Просто делать:

QWidget* parentWithEmptySpaceBorder = new QWidget( NULL );
parentWithEmptySpaceBorder->setLayout( new QVBoxLayout() );
parentWithEmptySpaceBorder->layout()->setContentsMargins( 100,100,100,100 );

QWidget* myWidget = new QWidget( NULL );
parentWithEmptySpaceBorder->layout()->addWidget( myWidget );

parentWithEmptySpaceBorder->show();
person jpo38    schedule 01.05.2016
comment
@ jpo38.Спасибо, а как насчет mouseEvents? может ли этот макет получать mouseEvent? потому что мне нужно обработать mouseEvent в этой области - person IMAN4K; 02.05.2016
comment
@IMAN4K: события мыши будут получены parent. Его можно передать widget с помощью QObject::installEventFilter. - person jpo38; 02.05.2016