qt C++创建一个listView,添加scrollArea并设置高度固定,循环生成28个按钮添加到LIstView中,按钮布局为固定两行
时间: 2024-09-13 16:09:53 浏览: 48
在Qt C++中,你可以使用QListView、QScrollArea和QPushButton来创建这样的界面。首先,你需要包含必要的头文件,并创建所需的部件。这里是一个简单的示例:
```cpp
#include <QApplication>
#include <QWidget>
#include <QListView>
#include <QScrollArea>
#include <QPushButton>
#include <QVBoxLayout>
#include <QGridLayout>
class ScrollableListView : public QWidget {
public:
ScrollableListView(QWidget *parent = nullptr) :
QWidget(parent),
listView(new QListView(this)),
scrollArea(new QScrollArea(this))
{
// 设置列表视图的基本样式
listView->setFlow(QListView::TopToBottom);
listView->setUniformItemSizes(true); // 每个item大小一致
// 创建按钮布局
QVBoxLayout* buttonLayout = new QVBoxLayout();
for (int i = 0; i < 28; i++) {
QPushButton* button = new QPushButton(QStringLiteral("Button %1").arg(i + 1), this);
button->setFixedSize(100, 50); // 设置按钮尺寸
buttonLayout->addWidget(button);
if ((i + 1) % 6 == 0) { // 到达新的一行
break;
}
}
// 将按钮布局放入垂直布局
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(buttonLayout);
// 将垂直布局放入滚动区域
scrollArea->setFixedHeight(250); // 设置滚动区的高度为固定值
QVBoxLayout* layout = new QVBoxLayout(this);
layout.addWidget(scrollArea);
setLayout(layout);
// 添加列表视图到窗口
scrollArea->setWidget(listView);
scrollArea->installEventFilter(this); // 监听滚动事件
}
private slots:
void onScroll() {
// 如果需要响应滚动事件,可以在这里编写处理逻辑
}
bool eventFilter(QObject *object, QEvent *event) {
if (event->type() == QEvent::Wheel) {
onScroll(); // 当滑轮滚动时触发slot
return true; // 吸收事件防止传递给父级
}
return QWidget::eventFilter(object, event);
}
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
ScrollableListView window;
window.show();
return app.exec();
}
```
在这个例子中,我们首先创建了一个`ScrollableListView`类,它继承自`QWidget`。在构造函数里,我们设置了QListView、QScrollArea以及28个QPushButton,并将它们按照指定的方式组织起来。然后我们在主函数中创建了这个窗口并显示出来。
阅读全文