QT —— <QHash> 存储 & 使用 & 遍历

1. 定义:QHash <Key,T>  存储 (键,值) 对,并提供与键相关的值的非常快速的查找。

2. QHash 和 QMap 比较:  QHash提供与QMap非常相似的功能。 不同之处是:

  •     QHash提供比QMap更快的查找。
  •     迭代器遍历QMap时 ,项(items)始终按键排序。 使用QHash ,这些项是任意排序的。
  •     QMap的键类型必须提供运算符 <() 。 QHash的键类型必须提供运算符 ==() 和一个名为 qHash() 的全局哈希函数。

一、示例

#include <QCoreApplication>
#include <QHash>
#include <QHashIterator>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QHash<QString, int> hash;      //定义hash, key:QString, value:int
    
    hash["one"] = 1;               //插入数据,方法1: value: <"one",1>
    hash.insert("two", 2);         //插入数据,方法2: value: <"two",2> 
                                   //insert方法进行插入的,每个键只允许一个值
                                   //如果一个键插入多个值,使用QHash::insertMulti(const Key &key, const T &value)


    int num1 = hash["one"];         //获取数据,方法1: value: 1
    int num2 = hash.value("two");   //获取数据,方法2: value: 2
    
    int time = 30;
    if (hash.contains("time"))          //查询数据,方法1: value: time  = 30
    {
        time = hash.value("time");
    }                                 
    
    int time2 = hash.valu
要在Qt的ListView中显示QList<int>数据,需要使用QAbstractListModel作为数据模型并重写rowCount、data和roleNames函数。 以下是一个简单的例子: ```cpp 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: ```cpp 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<int>类型的数据列表,实例化了IntListModel,并通过setData函数将数据传递给IntListModel。然后将IntListModel设置为ListView的model,并将每个元素用Text组件显示出来。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值