2016-04-03 7 views
0

拡張可能なQtダイアログアプリケーションを作成しようとしています。主なレイアウトはQVBoxLayoutです。上部には2つのビューとQPushButtonボタンがあります。ボタンをクリックすると、最初に隠されていた下部のウィジェットが展開されます。下部ウィジェットには、下部ウィジェットを折りたたみ(隠す)ことができる別のプッシュボタンがあります。ボトムウィジェットが折り畳まれたり折りたたまれたりすると、ダイアログサイズのサイズも変更されることが予想されます。拡張ダイアログのサイズを変更するにはどうすればよいですか?

しかし、何らかの理由で、ダイアログウィジェットのサイズは、下部ウィジェットが展開されている場合にのみ増加します。そして(200,100)に戻ることは決してありません。私が逃したものはありますか?

環境:Qt Creator 3.6.1; Based on Qt5.6.0 (MSVC2013 32bit); build on Mar 14 2016; revision d502727b2c

コード私が使用しています:あなたの助けを

Dialog::Dialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::Dialog) 
{ 
    ui->setupUi(this); 

    QTreeView *tree = new QTreeView; 
    QTableView *table = new QTableView; 
    QPushButton *button_show = new QPushButton; 
    button_show->setText(tr("Show hidden panel")); 
    QHBoxLayout *layout_top = new QHBoxLayout; 
    layout_top->addWidget(tree); 
    layout_top->addWidget(table); 
    layout_top->addWidget(button_show); 


    QHBoxLayout *layout_bottom = new QHBoxLayout; 
    QTextEdit *editor = new QTextEdit; 
    QPushButton *button_hide = new QPushButton; 
    button_hide->setText(tr("Hide the bottom panel")); 

    g_pEditor = editor; 
    layout_bottom->addWidget(editor); 
    layout_bottom->addWidget(button_hide); 
    QWidget *panel = new QWidget; 
    panel->setLayout(layout_bottom); 

    QVBoxLayout *layout_main = new QVBoxLayout; 
    layout_main->addLayout(layout_top); 
    layout_main->addWidget(panel); 
    setLayout(layout_main); 

    panel->hide(); 
    connect(button_show, &QPushButton::clicked 
     , panel 
     , [=]() 
    { 
    panel->setVisible(true); 
    button_show->setEnabled(false); 
    resize(200, 200);// not really working, the dialog size is able to increase without calling resize() 
    }); 

    connect(button_hide, &QPushButton::clicked, panel, [=]() 
    { 
    panel->hide(); 
    button_show->setEnabled(true); 
    resize(200,100);// does not shrink the dialog size* 
    }); 

    resize(200,100); 
} 

感謝:)

+0

ダイアログのサイズを手動で変更することは可能でしょうか?そうでなければ、メインレイアウトのサイズ制約をQLayout :: SetFixedSizeに設定することができます。ウィジェットを非表示または表示すると、レイアウトのサイズが自動的に変更されます。 –

答えて

1

あなたの代わりにsetFixedSize(w, h)を試してみてください。これにより、最小サイズと最大サイズの両方が(w、h)に設定されます。 "これは、QLayoutによって設定されたデフォルトのサイズ制約を上書きします。"