qt listview显示QList<int>中数据
要在Qt的ListView中显示QList
QList<int> dataList;
dataList << 1 << 2 << 3 << 4 << 5;
QStandardItemModel *model = new QStandardItemModel;
for (int i = 0; i < dataList.size(); ++i) {
QStandardItem *item = new QStandardItem(QString::number(dataList.at(i)));
model->appendRow(item);
}
QListView *listView = new QListView;
listView->setModel(model);
listView->show();
在这个示例中,我们首先创建了一个QList
qt listview显示QList<int>数据
要在Qt的ListView中显示QList
以下是一个简单的例子:
class IntListModel : public QAbstractListModel
{
Q_OBJECT
public:
IntListModel(QObject *parent = nullptr) : QAbstractListModel(parent) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
return m_data.count();
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (!index.isValid() || index.row() >= m_data.count())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return m_data.at(index.row());
return QVariant();
}
QHash<int, QByteArray> roleNames() const override
{
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "data";
roles[Qt::EditRole] = "data";
return roles;
}
void setData(const QList<int> &data)
{
beginResetModel();
m_data = data;
endResetModel();
}
private:
QList<int> m_data;
};
在这个例子中,我们定义了一个IntListModel,继承自QAbstractListModel。rowCount函数返回数据列表中的元素数量,data函数返回指定索引的元素值,roleNames函数定义了数据模型中的角色名。setData函数用于设置数据列表。
在界面代码中,我们可以将IntListModel设置为ListView的model,并将数据列表通过setData函数传递给IntListModel:
QList<int> data = {1, 2, 3, 4, 5};
IntListModel *model = new IntListModel(this);
model->setData(data);
ListView {
model: model
delegate: Text {
text: model.data
}
}
在这个例子中,我们创建了一个QList
qt从多个文件中获取到多分QList数据,每一个文件对应一份QList数据,每份数据都包含有图片,需要把每份QList数据发动到qml中,并用listview把图片和文字显示出来,请给出详细的实现代码
以下是一个示例代码,假设有三个文件,每个文件中包含一份QList数据,每个QList数据包含一个图片和一个文字:
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QList>
struct Data {
QString text;
QString image;
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QList<Data> list1;
QList<Data> list2;
QList<Data> list3;
// 从文件中读取数据填充到 QList
// ...
QQmlApplicationEngine engine;
// 把 QList 数据发动到 QML 中
engine.rootContext()->setContextProperty("dataList1", QVariant::fromValue(list1));
engine.rootContext()->setContextProperty("dataList2", QVariant::fromValue(list2));
engine.rootContext()->setContextProperty("dataList3", QVariant::fromValue(list3));
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("QList Demo")
GridLayout {
rows: 3
columns: 1
spacing: 10
Component {
id: dataItem
Image {
width: 100
height: 100
source: model.image
}
Label {
text: model.text
}
}
ListView {
id: listView1
model: dataList1
delegate: dataItem
}
ListView {
id: listView2
model: dataList2
delegate: dataItem
}
ListView {
id: listView3
model: dataList3
delegate: dataItem
}
}
}
在这个示例中,我们通过 QQmlApplicationEngine
发动了三个 QList 数据到 QML 中,分别命名为 dataList1
、dataList2
和 dataList3
。然后在 QML 中,我们使用 ListView
来展示这些数据,每个列表项包含一个图片和一个文字,使用了 Component
来定义列表项的显示方式。
相关推荐













