2016-11-17 9 views
0

私はQtでアプリケーションを作成します。 mainwindow.cppには別のウィジェットを表示するフレームがあります。このウィジェットはQPushButtonによってコードビハインド(データベース内のデータ)で埋められます。最大ボタン数は8本のコードでデータベースからボタンを作成:なぜグリッドレイアウトに追加された動的ボタンには、相互に大きな距離がありますか?

for(int i = 0; i < btnlst.count(); ++i) 
    { 
     QPushButton *b = new QPushButton(this); 
     //b->setGeometry(0,10,100,100); 
     b->setStyleSheet("background-color: qlineargradient(spread:pad, x1:1, y1:0.682, x2:1, y2:0, stop:0.142857 rgba(220, 0, 22, 255), stop:0.980296 rgba(216, 74, 73, 255), stop:1 rgba(217, 73, 73, 255));border:none ;color:white;"); 
     b->setText(btnlst[i]); 
     if(mood=="Frame") 
     { 
      QSize size(55,55); 
      b->setMinimumSize(size); 
      b->setMaximumSize(size); 
      b->setSizePolicy(QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum)); 
      ui->gridLayout->addWidget(b,0,i,Qt::AlignVCenter); 
     } 
     else 
     { 
      QSize size(70,70); 
      b->setMinimumSize(size); 
      b->setMaximumSize(size); 
      b->setSizePolicy(QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum)); 
      if(i<4) 
       ui->gridLayout->addWidget(b,0,i,Qt::AlignVCenter); 
      else 
       ui->gridLayout->addWidget(b,0,i-3,Qt::AlignVCenter); 
     } 
     //after creates buttons 

     connect(b,SIGNAL(clicked()),this,SLOT(Function())); 
     btn << b; 

    } 
    ui->gridLayout->setSpacing(0); 

Iは、最大(750150)と最小値(600150)を用いて、ウィジェットのサイズを固定しました。これは私のウィジェット(私がメインウィジェットに垂直レイアウトを使用)です:
enter image description here
これは組み込みデバイスに私の結果である:あなたが、私はウィジェットとセットグループボックス白色の黒い色を設定見たよう
enter image description here
。黒色はフレームに表示されず、各ボタンの間に多くのスペースがあります。私は8つのボタンを作成しますが、私のフレームには5つのボタンだけを表示します。
どのように各ボタン間のスペースを減らすことができますか?

答えて

1

layout->setAlignment(...)を呼び出すことで、レイアウトとの位置合わせを設定できます。それらを中心に整列させる作業例を示します。必要に応じてQt::AlignRightまたはQt::AlignLeftを使用することもできます。

#include <QApplication> 
#include <QGroupBox> 
#include <QLayout> 
#include <QPushButton> 

class MyWidget : public QGroupBox 
{ 
    Q_OBJECT 
public: 
    MyWidget(QWidget *parent = 0) : QGroupBox(parent) 
    { 
     setTitle("GROUP BOX"); 
     setStyleSheet("QPushButton{background-color: qlineargradient(spread:pad, x1:1, y1:0.682," 
         "x2:1, y2:0, stop:0.142857 rgba(220, 0, 22, 255)," 
         "stop:0.980296 rgba(216, 74, 73, 255)," 
         "stop:1 rgba(217, 73, 73, 255));" 
         "border:none; color:white;}"); 
     QGridLayout *grid_layout = new QGridLayout; 
     for(int i = 0; i < 5; i++) 
     { 
      QPushButton *button = new QPushButton; 
      button->setFixedSize(80, 80); 
      button->setText("Button"); 
      grid_layout->addWidget(button, 0, i); 
     } 
     grid_layout->setAlignment(Qt::AlignCenter); 
     grid_layout->setSpacing(1); 
     setLayout(grid_layout); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MyWidget widget; 
    widget.resize(800, 200); 
    widget.show(); 
    return a.exec(); 
} 

#include "main.moc" 

結果: Result image

関連する問題