如何在Qt中的QGridLayout中设置QPushButton大小

7
我目前正在学习qt。我试图使用81个QPushButton构建一个小型GUI程序,我想将这些按钮设置为9行9列。我认为最好的实现方式是使用QGridLayout。运行后的效果如下:
enter image description here 我尝试了很多方法来改变按钮的大小,但按钮的大小仍然保持默认值。以下是我的代码:
void MainWindow::setButtons()
{
    const QSize btnSize = QSize(50, 50);
    for(int i = 0; i < 81; i++) {
        btn[i] = new QPushButton(centralWidget);
        btn[i]->setText(QString::number(i));
        btn[i]->resize(btnSize);
    }

    QGridLayout *btnLayout = new QGridLayout(centralWidget);
    for(int i = 0; i < 9; i++) {
        for(int j = 0; j < 9; j++) {
            btnLayout->addWidget(btn[j + i * 9], 0 + i, j);
            btnLayout->setSpacing(0);
        }
    }
    centralWidget->setLayout(btnLayout);
}

那么我该怎样实际改变这些按钮的大小呢?
谢谢。


也许可以使用 setSizePolicy 方法? 或者使用 setMaximumSize() 和 setMinimumSize() 方法来固定大小。 - Andrey Semenov
每个按钮的大小由布局动态处理。如果您更改布局大小,则按钮应随布局一起缩放。它们如何缩放取决于几个参数,例如sizePolicy、minimumSize、maximumSize和baseSize。仅设置大小对布局中的小部件没有实际影响。您能描述一下您所期望的行为吗? - Benjamin T
@BenjaminT 我只是想制作一个扫雷游戏来练习Qt,因为我对此非常陌生。所以我希望这些按钮能够像一些方块一样紧密地保持在一起。在点击它们中的任何一个后,它将会消失并显示下面的标签。那么你能否告诉我如何更具体地设置这些sizePolicy、minimumSize等参数呢?谢谢。 - Theodore Tang
1个回答

10
如果您想为小部件使用固定大小,您必须使用setFixedSize()函数:
const QSize btnSize = QSize(50, 50);
for(int i = 0; i < 81; i++) {
    btn[i] = new QPushButton(centralWidget);
    btn[i]->setText(QString::number(i));
    btn[i]->setFixedSize(btnSize);
}

QGridLayout *btnLayout = new QGridLayout(centralWidget);
for(int i = 0; i < 9; i++) {
    for(int j = 0; j < 9; j++) {
        btnLayout->addWidget(btn[j + i * 9], 0 + i, j);
        btnLayout->setSpacing(0);
    }
}
centralWidget->setLayout(btnLayout);

输出:

在这里输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接