0

a の中に2 つの s と aQWidgetを入れます。レイアウトのコンテナとして機能する のジオメトリを変更できますが、サイズを変更することはできません: ここに私のコードQHBoxLayoutwith,QPushButtonQLabelQWidgetQPushButton

void
QTitleBar::resizeEvent( QResizeEvent * event)
{
 QSize size = event->size();
 int widgetHeight = size.rheight();
 int widgetWidth = size.rwidth();

 std::cout << "resizeEvent h:" <<
  widgetHeight  
  << " w: " << widgetWidth << std::endl;

 int layoutH = (int)((float)widgetHeight*(float)0.20);


 std::cout << "resizeEvent h:" <<
  layoutH  
  << " w: " << widgetWidth << std::endl;

 mapButton->setGeometry(0, 0, 120, layoutH);
 titleWidget->setGeometry(0, 0,  widgetWidth, layoutH);

// title->setGeometry(130, 0, widgetWidth - (2*130), layoutH);
// closeButton->setGeometry(widgetWidth - (2*130), 0,  130, layoutH);

 //closeButton->setGeometry(0, 0,  widgetWidth, layoutH);

}

何か問題がありますか?

4

2 に答える 2

1
   mapButton->setMinimumSize(QSize(0,0));
   mapButton->setMaximumSize(QSize(10000,10000));

QPushButtonこれで、(実質的に) 任意のサイズに設定できます。コードのように titlewidget のサイズが変更され、再配置されるため、これで問題が解決することを願っています。

于 2012-07-27T10:50:15.977 に答える
1

[さらなる読者へのアドバイス...]

お気づきのように、ボタンのgeometryプロパティを使用するのは正しい方法ではありません。これは、含まれているQLayoutによって制御されるためです。Qt レイアウトの処理または の独自の実装の作成については、こちらを参照してくださいQLayout

また、 のジオメトリを設定すると、無限ループが発生するQWidget可能性があることに注意してください。

プロパティの高さを直接設定すると、がどの にも含まれていないQWidget場合にのみ機能します。それ以外の場合は、指摘されているように、に適用されるmimimumHeightmaximumHeightの寸法内でサイズ変更されます。( sizeプロパティはこれら 2 つだけをバンドルすることに注意してください。) sizePolicyプロパティを変更することで、この動作に影響を与えることができます。QWidgetQLayoutQWidget

だから、使用してScarCodeの答えに固執する

QWidget.setMinimumSize(QSize)
QWidget.setMaximumSize(QSize)

完全性については、 Qt スタイル シートQPushButtonを使用して のサイズも変更できることを指摘したいと思います。

QPushButton {
    min-width: 0px;
    max-width: 10000px;
}
于 2016-06-30T08:53:48.033 に答える