如何在Frameless QWidget周围建立一个自由空间?

时间:2016-05-01 18:19:03

标签: qt resize qwidget qt5.5

我在Qt中创建了一个自定义窗口,现在面临调整问题的大小。

我想要QWidgetQt::FramelessWindowHint)周围的空闲空间,以便我可以处理该区域中的鼠标悬停+离开+按下+释放事件,在此事件中我更改光标形状并调整大小小部件。 (我不希望mouseEvent用于小部件,但是用于该空间)

我怎么能得到这样的区域?

1 个答案:

答案 0 :(得分:1)

我认为您的QWidget会在某个时候添加到QLayout。然后通过调用[setContentsMargins],只要求包含QLayout在其内容周围保留一些可用空间。

示例,您有:

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