2016-07-30 5 views
1

QGridLayoutは中央のウィジェット内にあり、固定サイズのウィジェット(内部ウィジェットと呼ばれます)にはボタンでいっぱいにQGridLayoutが含まれています。内部ウィジェットのサイズは、グリッド内にいくつのボタンがあるかによって決まり、正確なフィット(ボタンの間にスペースはありません。FixedSizeのポリシーがボタンのコンストラクターに適用されます)、すべてのボタンのサイズとポリシーはコンストラクタ。今、私がインナーウィジェットをどんな種類のレイアウトにも入れないと、それはうまく動作し、素敵な四角いボタンが得られます。しかし、内側のウィジェットをグリッドレイアウトに配置すると、すべてのボタンが突然サイズを変更し、ウィジェットもサイズを維持するようには見えません。どうして?FixedSizeを使用したウィジェットは、そのサイズをいつでも変更します

編集:MyButtonTable:

MyButtonTable::MyButtonTable(QWidget *parent) : QWidget(parent), array() 
{ 
    size_x = 2; 
    size_y = 2; 
    QGridLayout* layout = new QGridLayout(); 
    for(size_t x = 0; x < size_x; x++) { 
     this->array.push_back(std::vector<MyRightClickButton*>()); 
    } 
    for(size_t x = 0; x < size_x; x++) { 
     for(size_t y = 0; y < size_y; y++) { 
      this->array[x].push_back(new button_t()); 
      QObject::connect(array[x][y], SIGNAL(rightClicked()), this, SLOT(internalRightClick())); 
      QObject::connect(array[x][y], SIGNAL(clicked()), this, SLOT(internalClick())); 
      layout->addWidget(array[x][y], x, y); 
     } 
    } 
    layout->setSpacing(0); 
    layout->setContentsMargins(0,0,0,0); 
    this->setLayout(layout); 
    this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
    this->setMinimumSize(QSize(0,0)); 
    this->resize(QSize(10*size_y,10*size_x)); 
} 

MyRightClickButton(QWidget *parent = 0):QPushButton(parent) { 
     marked = false; 
     this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
     this->setMinimumSize(QSize(0,0)); 
     this->resize(QSize(10,10)); 
    } 
+1

私にとっては、レイアウトには独自のサイズポリシーがあり、ウィジェットの固定サイズは無視されます。 @RomaValcer – Athena

+0

@Athenaとそれについて何ができますか? – RomaValcer

+0

私は経験した限り、どちらかを使うべきです。 – Athena

答えて

0

レイアウトマネージャは、それらの中に子ウィジェットを配置するために使用されます。配置は各レイアウトマネージャを指定する。レイアウトマネージャは、サイズ変更ポリシーに基づいて子ウィジェットのサイズを調整します。子ウィジェットのサイズ変更ポリシーを設定していない場合、resize()またはsetGeometry()を使用して子ウィジェットの固定サイズを設定していても、レイアウトマネージャによってサイズが変更されます。例えば

widget->setFixedSize (100, 100); 
widget->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed); 

これは、それが行われるべきかです。

+1

子ウィジェットのコンストラクタでポリシーを設定しました。 – RomaValcer

+0

いくつかのコードを共有すると役に立ちます。 – ninja

+0

に関連コードが追加されました。 – RomaValcer

関連する問題