2016-04-03 13 views
0

Ich versuche eine erweiterbare Qt-Dialoganwendung zu erstellen. Das Hauptlayout ist ein QVBoxLayout. Der obere Teil hat zwei Ansichten und eine QPushButton-Schaltfläche. Wenn Sie auf die Schaltfläche klicken, wird das untere Widget, das anfangs ausgeblendet ist, geöffnet. Im unteren Widget gibt es einen weiteren Knopf, der das untere Widget falten (verstecken) kann. Wenn das untere Widget ein- und ausklappt, erwarte ich, dass sich auch die Größe der Dialoggröße ändert.Wie ändert man die Größe eines erweiterbaren Dialogs?

Aber aus irgendeinem Grund erhöht sich die Dialoggröße nur, wenn das untere Widget entfaltet wird. Und nie zurückweichen auf (200, 100). Gibt es etwas, was ich vermisst habe?

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

Der Code Ich verwende:

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

Vielen Dank für Ihre Hilfe :)

+0

Sollte es möglich sein, den Dialog manuell zu skalieren? Wenn nicht, könnten Sie die Größenbeschränkung des Hauptlayouts auf QLayout :: SetFixedSize setzen. Das Layout sollte dann automatisch angepasst werden, wenn Sie Widgets ein- oder ausblenden. –

Antwort

1

Sie sollte setFixedSize(w, h) stattdessen versuchen. Dies setzt sowohl die minimale als auch die maximale Größe auf (w, h). "Dadurch werden die von QLayout festgelegten Standardgrößenbeschränkungen überschrieben."

Verwandte Themen