2011-06-14 27 views
1

我有一种形式,我正在申请ScrollArea,但它没有得到正确应用? 我想将四个按钮放置在可滚动区域中,并且当按钮增加时,滚动条应该出现在那里垂直向下sc下。QT中的ScrollArea问题?

当前当我试图添加更多按钮时,按钮与组合框重叠并且不会向下生长。

这里是我的代码:

QPushButton *b1 = new QPushButton(strsearch); 
      QPushButton *b2 = new QPushButton(strsearch); 
      QPushButton *b3 = new QPushButton(strsearch); 
      QPushButton *b4 = new QPushButton(strsearch); 

b1->setStyleSheet(

       "background-image: url(:/user.gif);" 
       "background-repeat:no-repeat;" 
       "background-attachment:fixed;" 
       "background-position:left top;" 
       "border-style: outset;" 
       "background-color : black;" 
       "border-width: 2px;" 
       "border-radius: 10px;" 
       "border-color: black;" 
       "font: bold 16px;" 
       "color: black;" 
       "min-width: 10em;" 
       "min-height: 0.75em;" 
       "margin: 0 1px 0 1px;" 
       "color:rgb(255,255,255);" 
       "padding: 6px;" 
       ); 



b2->setIcon(QIcon(":/user.gif")); 
      b2->setIconSize(QSize(160, 26)); 
      b3->setIcon(QIcon(":/user.gif")); 
      b3->setIconSize(QSize(160, 26)); 
      b4->setIcon(QIcon(":/user.gif")); 
      b4->setIconSize(QSize(160, 26)); 

QGridLayout *layout = new QGridLayout; 
layout->addWidget(b1, 1, 0); 
      layout->addWidget(b2, 2, 0); 
      layout->addWidget(b3, 3, 0); 
      layout->addWidget(b4, 4, 0); 
layout->addWidget(scrollArea); 
    layout->setAlignment(Qt::AlignBottom); 
    setLayout(layout); 

回答

5
//Create the buttons 
QPushButton *b1 = new QPushButton("Button 1"); 
QPushButton *b2 = new QPushButton("Button 2"); 
QPushButton *b3 = new QPushButton("Button 3"); 
QPushButton *b4 = new QPushButton("Button 4"); 

//Add the buttons to a vertical layout (faster than grid layout) 
QVBoxLayout *scrollLayout = new QVBoxLayout; 
scrollLayout->addWidget(b1); 
scrollLayout->addWidget(b2); 
scrollLayout->addWidget(b3); 
scrollLayout->addWidget(b4); 

//Create a viewport widget that contains the layout with buttons 
QWidget *viewport = new QWidget; 
viewport->setLayout(scrollLayout); 

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

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

@Riccardo:但我想滚动仅适用于按钮区域,他们会根据您code.What放在QVBoxLayout是应用mainLayout-需要> addWidget(scrollArea);.我可以使它像这样scrollLayout-> addWidget(scrollArea); – user662285 2011-06-14 10:24:35

+0

明白了。谢谢。 – user662285 2011-06-14 10:30:03

+0

@Riccardo:如何检查控制是否添加到主布局不再添加它? – user662285 2011-06-14 12:20:00