为啥添加到网格布局的动态按钮彼此之间有很大的距离?
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->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("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 布局中?