QT中的 容器(container)

只要是数据就必须使用容器,程序中容器中的数据更方便增删改查
Qt中提供了一组通用的基于模板的容器类(container class)。可以用来存储指定的项目(items),如QVector(QString),与STL(C++标准模板库)相比,Qt中的容器更轻量,更安全,耿荣翻译使用

遍历容器
  • 要遍历存储在容器中的项,可以使用两种类型的迭代器之一:java风格的迭代器和stl风格的迭代器。java风格的迭代器更容易使用并提供高级功能,而STL风格的迭代器稍微更高效,可以与Qt和STL的通用算法一起使用。
  • Qt还提供了一个foreach关键字,使遍历容器中存储的所有项变得非常容易
Qt中的容器
  • Qt提供了以下顺序容器:QList、QLinkedList、QVector、QStack和QQueue。对于大多数应用程序,QList是最好的类型。虽然它是作为数组列表实现的,但是它提供了非常快的前置和附加。如果你真的需要一个链表,使用QLinkedList;如果您希望您的项目占用连续的内存位置,请使用QVector。QStack和QQueue是提供LIFO和FIFO语义的便利类。
  • Qt还提供了这些关联容器:QMap、QMultiMap、QHash、QMultiHash和QSet。“多”容器方便地支持与单个键相关联的多个值。“哈希”容器通过使用哈希函数而不是对排序集进行二进制搜索,从而提供更快的查找。
  • 作为特殊情况,QCache和QContiguousCache类在有限的缓存存储中提供了对象的高效散列查找。
JAVA风格的遍历器

在这里插入图片描述

STL风格

在这里插入图片描述

STL风格的迭代器兼容Qt和STL点的通用算法,对于每个容器都有只读或者 可读可写两个类型,一般来说只读迭代器比可读可写的迭代器更快,所以尽量使用只读的迭代器

STL迭代器的API是以数组中的指针为模型的。例如,++操作符将迭代器向前推进到下一个项目,*操作符返回迭代器指向的项目。
注意:STL风格的迭代器指向项目中的,其中容器的begin()函数返回的是指向该容器的第一个项目的迭代器,end()函数返回的也是一个迭代器,但是时最后一个项目的写一个项目的虚假项目,end()表示的是一个无效的位置
当列表为空时,begin()函数等价于end();

2.1 QList

    QList<QString>list;
    list<<"hello"<<"my"<<"life";
 
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将Qt容器widget的形状改为圆形,可以使用QPainterPath类和QWidget的setMask()方法。 以下是一个示例代码,可以将一个QWidget容器的形状改为圆形: ``` #include <QPainterPath> #include <QWidget> // 定义一个圆形QWidget子类 class CircularWidget : public QWidget { public: CircularWidget(QWidget* parent = nullptr) : QWidget(parent) {} protected: // 重写paintEvent()方法,在此处绘制圆形 void paintEvent(QPaintEvent*) override { QPainterPath path; path.addEllipse(rect()); QPainter painter(this); painter.setClipPath(path); painter.drawEllipse(rect()); } }; int main(int argc, char* argv[]) { QApplication app(argc, argv); // 创建一个QWidget容器 QWidget container; container.setGeometry(100, 100, 200, 200); // 创建一个圆形QWidget子类,作为容器的子控件 CircularWidget child(&container); child.setGeometry(0, 0, 200, 200); // 将子控件设置为容器的遮罩,使容器形状为圆形 container.setMask(child.mask()); container.show(); return app.exec(); } ``` 在上面的示例,我们创建了一个名为CircularWidget的QWidget子类,该类的paintEvent()方法绘制了一个圆形的QPainterPath。然后,我们将该子控件添加到一个QWidget容器,并将该子控件的mask()作为容器的遮罩,使容器的形状变为圆形。最后,我们显示了该容器。 请注意,由于容器的形状已更改,因此可能需要相应地更改容器的布局和子控件的位置和大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值