在 Qt 中使用 QGridLayout
在一个 QWidget
上布局多个固定大小的 QPushButton
并使它们动态适应窗口大小,通常涉及以下步骤:
- 为每个
QPushButton
设置固定大小。 - 将这些按钮添加到
QGridLayout
中。 - 使用弹簧(
QSpacerItem
)在布局中添加必要的空白区域,以便在窗口大小改变时保持按钮的相对位置。
以下是一个示例代码,展示如何实现这一点:
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QSpacerItem>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
QGridLayout *layout = new QGridLayout(&window);
// 设置按钮并添加到布局中
const int buttonSize = 100;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
QPushButton *button = new QPushButton(QString("按钮 %1").arg(i * 3 + j + 1));
button->setFixedSize(buttonSize, buttonSize); // 设置固定大小
layout->addWidget(button, i, j);
}
}
// 添加弹簧以使布局在窗口变化时适应
layout->setRowStretch(3, 1);
layout->setColumnStretch(3, 1);
window.show();
return app.exec();
}
在这个例子中,我们创建了一个 3x3 的按钮网格,每个按钮都有固定的大小。通过调用 layout->setRowStretch
和 layout->setColumnStretch
,我们为布局的最后一行和最后一列添加了弹簧。这些弹簧在窗口大小改变时会扩展或收缩,从而保持按钮网格的中心位置。
请注意,根据你的具体布局需求,你可能需要调整弹簧的位置或添加更多的弹簧来实现所需的布局效果。
删除原有布局:
QWidget *pWidget = new QWidget();
QLayout *pLayout = pWidget ->layout();
if(nullptr != pLayout)
{
delete pLayout;
}