2016-05-01 9 views
0

私はQtでカスタムウィンドウを作成しましたが、今はサイズ変更の問題に直面しています。フレームレスQWidgetの周りに空きスペースを作るには?

私はQWidgetQt::FramelessWindowHint)の周りに空きスペースが必要なので、その領域でMouse Hover + Leave + Press + Releaseイベントを処理できます。このイベントではカーソルシェイプを変更し、ウィジェットのサイズを変更します。 (私はwidgetではなくそのスペースのmouseEventを望んでいます)

どうすればこのような領域を得ることができますか?

答えて

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

を@ jpo38。ありがとうございますが、mouseEventsはどうですか?そのレイアウトはmouseEventを受け取ることができますか? beacuase私はその領域でmouseEventを処理する必要があります – IMAN4K

+0

@ IMAN4K:マウスイベントは 'parent'によって受信されます。 'QObject :: installEventFilter'を使って' widget'に送信することができます。 – jpo38

関連する問題