2015-10-16 91 views
0

我有一堆QPushButtons和我自己的QToolButtons风格的网格布局。我的对话框正在显示我的口味,除非我碰巧有太多的按钮,导致网格扩大到超出屏幕尺寸。所以我想添加一个滚动条。Qt网格布局在滚动区域显示不正确

我已经读了一堆问题一/关于滚动条和QtGridLayout但实现这种接受的解决方案,例如qdialog with scrollarea and gridlayout 我所有的按钮后解决方案(其中应该有自己的大小固定 - 相当于为清楚起见,下面省略代码)得到缩水到一个愚蠢的大小。此外,当我调整对话框大小时,滚动区域会相应调整大小,但其中的网格不会调整大小。我错过了什么?

注意:我已尝试各种方法来修复各种尺寸,基本上所有工作都没有滚动区域,但只要我将东西放在滚动区域中,网格单元格就会自动调整大小并进行无意义调整...

void createDatabaseWindow() 
{ 
    _database_widget = new QDialog; 
    QVBoxLayout* layout(new QVBoxLayout); 
    _database_layout = new QGridLayout; 

    QLabel* text(new QLabel("some text")); 
    layout->addWidget(text); 

    QVBoxLayout* vlayout(new QVBoxLayout); 
    _new_user_button = new QPushButton("New User"); 
    vlayout->addWidget(_new_user_button); 
    QPushButton* cancel_button(SM_NEW QPushButton("Cancel")); 
    vlayout->addWidget(cancel_button); 
    _database_layout->addLayout(vlayout, 0, 0); 

    std::vector<Result> database = getWholeDatabase(); 
    for (int i = 0; i < database.size(); i++){ 
     myQToolButton* button(new myQToolButton(database[i])); 
     _database_layout->addWidget(button, (i + 1)/N_ROWS_DATABASE, (i + 1) % N_ROWS_DATABASE); 
    } 

    // the following comes from an accepted solution, but doesn't work for me... 

    //Create a widget and set its layout as your new layout created above 
    QWidget *viewport = new QWidget; 
    viewport->setLayout(_database_layout); 

    //Add the viewport to the scroll area 
    QScrollArea *scrollArea = new QScrollArea; 
    scrollArea->setWidget(viewport); 

    //Add the scroll area to your main window's layout 
    layout->addWidget(scrollArea); 

    _database_widget->setLayout(layout); 


} 

回答

1

Got it! 问题在于网格布局内容的动态变化。修复一切的魔术线是:

_database_layout->setSizeConstraint(QLayout::SetMinAndMaxSize);