簡體   English   中英

如何修改QSet的元素?

[英]How to modify elements of a QSet?

我有QSet<QuadPattern> texture; 我想在循環中修改所有QuadPattern。

foreach不是一個好的解決方案,因為它可以復制。

使用此代碼:

 QMutableSetIterator<QuadPattern> it(texture); while (it.hasNext()) { it.next(); it.value().setCoordinate(...)); } 

我收到編譯錯誤:

error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers

函數setCoordinate是這樣的:

inline void setCoordinate(const std :: pair&value){_ unsordinate = value; }

為什么這個錯誤?

錯誤是因為您嘗試修改QMutableSetIterator::value()函數返回的const對象。

我相信你不能以這種方式修改你的集合項目,因此沒有這樣的API。 修改所有項目所需的只是清除集合並再次插入新項目。

QMutableSetIterator::value()返回const引用是有充分理由的。 集合中的項目根據其哈希值在內部編制索引。 如果您想要更改項目,通常需要刪除並重新插入該項目。 如果您希望避免復制數據,請將QuadPattern隱式共享類:

class QuadPatternData : public QSharedData
{
   ...
};

class QuadPattern {
  QSharedDataPointer<QuadPatternData> d;
public:
  QuadPattern() : d(new QuadPatternData) {}
  QuadPattern(const QuadPattern & other) : d(other.d) {}
  QuadPattern(QuadPattern && other) { d.swap(other.d); }
  void setCoordinate( ... ) { d->coordinate = ...; }
  ...
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM