ここ数日間、私は Qt レイアウト システムに関する特定の問題を解決しようとしています。一般化してみましょう: 2 つの行を持つウィジェットがあります。最初の行には、ツリー ボタン (またはその他のコントロール) があります。それらのレイアウトは写真に示されています:
中央のボタンは、使用可能なすべての余分なスペースを使用しています (ウィジェットのサイズが大きくなるにつれて拡大します)。問題は、プログラムで中央のウィジェット(ボタン)のサイズを変更し、レイアウトを維持したいということです。現在の実装では、中央のボタンのサイズを変更すると、次のようになります。
右ボタンを中央ボタンの右側に配置したい(余分なスペースなし)。ウィジェットのサイズを変更すると、位置 1 に戻ります (中央がすべての余分なスペースを取ります) が、これは私が望む効果ではありません。
これが私の現在の実装です:
#include "Widget_Old.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDebug>
WidgetOld::WidgetOld(QWidget *parent) :
QWidget(parent)
{
QVBoxLayout* mainLayout = new QVBoxLayout( this );
QWidget* firstRowWidget = new QWidget( this );
QPushButton* left = new QPushButton;
left->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred );
left->setText( "left" );
m_center = new QPushButton;
m_center->setText( "centerr");
m_center->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
QPushButton* right = new QPushButton;
right->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred );
right->setText( "right" );
QHBoxLayout* firstRowLayout = new QHBoxLayout( firstRowWidget );
firstRowLayout->addWidget( left );
firstRowLayout->addWidget( m_center );
firstRowLayout->addWidget( right );
QHBoxLayout* secondRowLayout = new QHBoxLayout;
QPushButton* button = new QPushButton( "resize" );
connect( button, SIGNAL(clicked()), SLOT(decrement()) );
secondRowLayout->addWidget( button );
mainLayout->addWidget( firstRowWidget );
mainLayout->addLayout( secondRowLayout );
}
WidgetOld::~WidgetOld()
{
}
void WidgetOld::decrement()
{
qDebug() << "Changing width from " << m_center->width() << " to " << m_center->width()/2;
m_center->resize( m_center->width()/2, m_center->height() );
}
ノート:
中央と右のウィジェット Qt::AlignLeft を揃えようとしましたが、結果はありません。実際、ウィジェットをレイアウトに残して配置すると、拡張機能が壊れる最小サイズを取得しようとします:(
参照が必要な場合は、コードを共有しました: https://drive.google.com/file/d/0B-mc4aKkzWlxTWdNNmpuQ0ptQ3M/edit?usp=sharing
私の投稿を読んでくれてありがとう、あなたが解決策を知っていることを願っています:)