如何围绕无框 QWidget 制作免费的 space?

How to make a free space around a Frameless QWidget?

我在 Qt 中自定义了 Window,现在面临调整大小的问题。

我想在我的 QWidget (Qt::FramelessWindowHint) 周围有一个免费的 space,这样我就可以在那个区域处理鼠标悬停+离开+按下+释放事件,在这个事件中我更改光标形状并调整小部件的大小。 (我不想要 widget 的 mouseEvent,但是 space)

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

我想你的 QWidget 在某个时候被添加到 QLayout。然后通过调用 [setContentsMargins].

请求包含的 QLayout 在其内容周围保留一些免费的 space

例如,您有:

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

然后,只需添加:

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

这将保证 widget 周围有 100 像素的空白区域。

为了更通用,如果你没有 parent,你可以像这样创建一个中间 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();