QT c++ 使用循环创建28个按钮,把他们放在一个按钮列表里,每次显示2*2布局, 按钮列表大小为2480*650 设置按钮列表滚动条隐藏,左右可循环切换
时间: 2024-09-12 17:10:11 浏览: 22
在Qt C++中,你可以使用QVBoxLayout和QPushButton来实现这个需求。首先,你需要包含必要的库,并创建一个QWidget作为容器:
```cpp
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
class ButtonList : public QWidget {
public:
ButtonList(QWidget *parent = nullptr) : QWidget(parent) {
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0); // 隐藏边距
layout->setSpacing(0); // 紧密排列
for (int i = 0; i < 28; i++) {
QPushButton *button = new QPushButton("Button " + QString::number(i+1), this);
layout->addWidget(button);
if ((i % 4 == 3) && (i != 27)) { // 每4个按钮换行
layout->addLayout(createGridLayout()); // 添加新的网格布局
}
}
setFixedWidth(2480);
setFixedHeight(650);
setAttribute(Qt::WA_TranslucentBackground, true); // 设置透明背景
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(layout);
setLayout(mainLayout);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平滚动条
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏垂直滚动条
// 右左切换功能需要额外的逻辑处理,通常使用信号槽机制或定时器
connect(buttons.last(), &QPushButton::clicked, this, &ButtonList::switchDirection); // 假设按钮列表命名为buttons
}
private:
QVBoxLayout *createGridLayout() {
QVBoxLayout *grid = new QVBoxLayout;
grid->setAlignment(Qt::AlignTop | Qt::AlignLeft);
return grid;
}
void switchDirection() {
// 这里编写代码来切换按钮列表的方向,比如改变布局方向或按钮位置
// 如果你想让按钮按顺序在新的一行开始,可以更新布局的起始位置
}
private:
QVector<QPushButton*> buttons;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
ButtonList listWidget;
listWidget.show();
return app.exec();
}
```
在这个示例中,我们创建了一个`ButtonList`类,它包含了28个按钮并按照2x2的网格排列。当达到一行的最后一个按钮时,会添加一个新的网格布局。滚动条设置为不可见。为了实现左右切换的功能,你可以在`switchDirection()`方法中添加相应的逻辑。
注意,`switchDirection()`函数在这里未提供具体的实现,因为实际的逻辑可能会更复杂,例如使用索引管理按钮的位置,或者使用信号槽连接来响应用户的点击事件。