2016-05-01 3 views
0

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

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

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

ответ

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(); 
+0

@ jpo38.Thanks, но как насчет mouseEvents? Может ли этот макет получать mouseEvent? beacuase Мне нужно обработать mouseEvent в этой области – IMAN4K

+0

@ IMAN4K: события мыши будут приниматься 'parent'. Он может быть передан 'widget' с помощью' QObject :: installEventFilter'. – jpo38