qt C++ 创建一个横向循环滑动的按钮列表,读取SD卡media/game文件,将数据传到按钮,不使用QML文件
时间: 2024-09-10 14:27:05 浏览: 52
要创建一个横向循环滑动的按钮列表,在Qt C++中,我们可以使用`QWidget`子类、`QPushButton`、以及文件操作来完成这个功能。以下是一个简单的示例代码:
首先,确保已经包含了必要的头文件,并导入了相关的Qt库:
```cpp
#include <QObject>
#include <QApplication>
#include <QDir>
#include <QFile>
#include <QLayout>
#include <QPushButton>
```
然后定义一个基础的按钮类,包含一个槽函数处理按钮点击事件:
```cpp
class SlidingButton : public QPushButton {
public:
explicit SlidingButton(const QString& fileName, QWidget* parent = nullptr)
: QPushButton(parent) {
setText(fileName.mid(0, fileName.size() / 2)); // 取文件名前半部分作为标签
connect(this, &SlidingButton::clicked, this, &SlidingButton::onButtonClicked);
}
private slots:
void onButtonClicked() {
QFile file("/media/game/" + text()); // 尝试打开按钮对应的文件
if (file.open(QIODevice::ReadOnly)) {
// 处理文件内容...
file.close();
} else {
qWarning("Failed to open file %s", text().toStdString().c_str());
}
}
};
```
接着,我们可以创建一个窗口并添加一个水平布局来显示这些滑动按钮:
```cpp
class MainWindow : public QWidget {
public:
MainWindow(QWidget* parent = nullptr) : QWidget(parent) {
QVBoxLayout* layout = new QVBoxLayout(this);
QDir dir("/media/game"); // 假设SD卡上的game目录
QStringList files = dir.entryList({ "*.txt" }, QDir::Files); // 获取.txt文件列表
for (const QString& fileName : files) {
SlidingButton* button = new SlidingButton(fileName, this);
layout->addWidget(button);
// 设置按钮之间的间距,例如设置为5像素
layout->addSpacing(5);
}
// 设置布局填充父窗口
layout->setStretchFactor(0, 0);
layout->setStretchFactor(1, 1);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.resize(600, 300); // 设定窗口大小
window.show();
return app.exec();
}
```
这段代码首先获取SD卡上的`.txt`文件列表,然后创建一个`SlidingButton`实例并将其添加到水平布局中。当用户点击按钮时,会尝试打开并读取对应的文件。
阅读全文