没有Qt3D的QCircularBuffer功能
QCircularBuffer正是我所需要的,但是将Qt3D添加到我们的编译器中使得构建过多,并且我是唯一需要它的人,所以我正在寻找一些帮助来弄清楚如何编写这种类型的功能。没有Qt3D的QCircularBuffer功能
QRingbuffer也是一个额外的包括我不能使用。这需要在不添加任何新库的情况下完成。
我正在使用C++,我看到了一些想法,但他们总是包括使用QLists而不限制其大小。
我需要将QList限制为10个项目,并且一旦添加了第十个项目,旧项目将被覆盖并且新项目被推到前面。
因此,举例来说,如果数组包含[0,1,2,3,4,5,6,7,8,9],我们继续添加元素,我们会看到这一点:
[10,1,2,3,4,5,6,7,8,9]
[11,10,2,3,4,5,6,7,8,9]
[12,11,10,3,4,5,6,7,8,9]
[13,12,11,10,4,5,6,7,8,9]
etc
下面是我在做什么目前:
if(list.size() > 10)
list.push_front(newItem);
else
list.push_back(newItem);
显然这不是限制列表的大小,并且它没有覆盖最早的项目,只有第一。
任何帮助将是美好的。
如果你希望他们从前面推十的最大值,那么我会做这样的事情:
//somewhere higher up (maybe static) int curIndex = 0;
static const int LIST_SIZE = 10;
if(list.size() >= LIST_SIZE) //added an = here to make it 10 elements
{
list.removeAt(curIndex);
list.push_front(newItem);
curIndex = (curIndex + 1) % LIST_SIZE;
}
else
list.push_back(newItem);
注:我没有编译器断手进行测试。
我忘了你想要的圆形的类型。这应该现在工作。删除不需要的索引并从头开始添加。 –
谢谢,但它只是将新元素预先添加到索引0中。所以[1,2,3]变成[4,2,3] [5,2,3] [6,2,3]等。 – bauervision
今天是不是我的一天。现在试试。我从未增加价值。 –
[Qt是否有循环缓冲区?](https://stackoverflow.com/questions/44188717/does-qt-have-cyclic-buffer) – Mike
可能很容易实现循环缓冲区。你想使用QList或者它可能是一个STL库类,例如'' –
也不想让它循环,以便在[[10,1,2,3,4,5,6, 7,8,9]'It goes'[10,11,2,3,4,5,6,7,8,9]'not'[11,10,2,3,4,5,6,7 ,8,9]' –