2016-04-03 35 views
0

Genişletilebilir bir Qt iletişim uygulaması oluşturmaya çalışıyorum. Ana düzen, QVBoxLayout'dur. Üst kısım iki görünüme ve bir QPushButton düğmesine sahiptir. Tıklama düğmesi, başlangıçta gizlenen alt parçacığı açacaktır. Alt pencere parçasında, alt parçacığı katlayabilen (gizleyen) başka bir basma düğmesi vardır. Alt pencere öğesi katlandığında/açıldığında, iletişim boyutunun da değişmesini beklerim.Genişletilebilir bir iletişim kutusu nasıl yeniden boyutlandırılır?

Ancak bazı nedenlerle, diyalog boyutu yalnızca alt pencere öğesi açıldığında artar. Ve asla geri çekilmesin (200, 100). Kaçırdığım bir şey var mı?

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

kod kullanıyorum: Yardımlarınız için

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); 
} 

Teşekkür :)

+0

İletişim kutusunu el ile yeniden boyutlandırmak mümkün mü? Eğer değilse, ana düzenin boyut kısıtlamasını QLayout :: SetFixedSize olarak ayarlayabilirsiniz. Widget'leri gizlediğinizde veya gösterdiğinizde, düzen otomatik olarak yeniden boyutlandırılmalıdır. –

cevap

1

Sizin yerine setFixedSize(w, h) denemelisiniz. Bu, hem minimum hem de maksimum boyutu (w, h) olarak ayarlar. "Bu, QLayout tarafından belirlenen varsayılan boyut kısıtlamalarını geçersiz kılacaktır."

İlgili konular