为啥添加到网格布局的动态按钮彼此之间有很大的距离?

Posted

技术标签:

【中文标题】为啥添加到网格布局的动态按钮彼此之间有很大的距离?【英文标题】:why dynamic button added to grid layout have a lot of distance between each other?为什么添加到网格布局的动态按钮彼此之间有很大的距离? 【发布时间】:2016-11-17 09:47:24 【问题描述】:

我在 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);  

我将小部件尺寸固定为最大值 (750,150) 和最小值 (600,150)。这是我的小部件(我在主小部件中使用垂直布局): 这是我在嵌入式设备中的结果: 如您所见,我为小部件设置了黑色并将组框设置为白色。但是黑色没有显示在框架中,每个按钮之间也有很大的空间。我创建了 8 个按钮,但在我的框架中只显示了 5 个按钮。 如何减少每个按钮之间的空间?

【问题讨论】:

【参考方案1】:

您可以通过调用layout-&gt;setAlignment(...) 简单地设置布局对齐方式。这是将它们与中心对齐的工作示例。如果需要,您也可以使用Qt::AlignRightQt::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("QPushButtonbackground-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"

结果:

【讨论】:

以上是关于为啥添加到网格布局的动态按钮彼此之间有很大的距离?的主要内容,如果未能解决你的问题,请参考以下文章

如何将纯 python 中动态创建的按钮添加到用 Kivy 语言编写的 kivy 布局中?

java中如何缩小两个jpanel间的距离

如何将小部件动态添加到网格?

如何在使用网格布局并将重叠小部件定位到距窗口边框特定距离时重叠 qwidgets?

在excel图表中怎么设置网格线之间的距离啊 ?

为啥这个简单的自动布局在 IB 中崩溃了?