QColor 到列表中供以后检索
QColor into list for later retrieval
我想将所有选定的颜色添加到一个列表中而不重复输入,然后所有选定的颜色都应该在一个小部件中弹出。
如何将 QColor 添加到列表中,然后再提取它
默认情况下,QColor
不提供 QSet
或 std::unordered_set
的哈希函数。您可以通过将其委托给 QRgb 的哈希函数(也包括 alpha 值)来在本地(或全局为您的程序)添加它:
#include <QColor>
#include <QDebug>
#include <QSet>
#include <unordered_set>
// hash function for QColor for use in QSet / QHash
QT_BEGIN_NAMESPACE
uint qHash(const QColor &c)
{
return qHash(c.rgba());
}
QT_END_NAMESPACE
// hash function for QColor for std::unordered_set
namespace std {
template<> struct hash<QColor>
{
using argument_type = QColor;
using result_type = size_t;
result_type operator()(const argument_type &c) const
{
return hash<QRgb>()(c.rgba());
}
};
} // namespace std
int main(int argc, char *argv[])
{
QSet<QColor> qs;
qs.insert(QColor(100, 100, 100));
qs.insert(QColor(100, 100, 100));
qs.insert(QColor(50, 100, 100));
qDebug() << qs.size() << qs.toList();
std::unordered_set<QColor> ss;
ss.insert(QColor(100, 100, 100));
ss.insert(QColor(100, 100, 100));
ss.insert(QColor(50, 100, 100));
qDebug() << ss.size();
for (auto c : ss)
qDebug() << c;
return 0;
}
或者您也可以不将 QColor
放入集合中,而是将 QRgb
值(通过 QColor::rgba()
)放入集合中,然后再将它们转换回 QColor
再次通过 QColor(QRgb)
构造函数。
我想将所有选定的颜色添加到一个列表中而不重复输入,然后所有选定的颜色都应该在一个小部件中弹出。
如何将 QColor 添加到列表中,然后再提取它
QColor
不提供 QSet
或 std::unordered_set
的哈希函数。您可以通过将其委托给 QRgb 的哈希函数(也包括 alpha 值)来在本地(或全局为您的程序)添加它:
#include <QColor>
#include <QDebug>
#include <QSet>
#include <unordered_set>
// hash function for QColor for use in QSet / QHash
QT_BEGIN_NAMESPACE
uint qHash(const QColor &c)
{
return qHash(c.rgba());
}
QT_END_NAMESPACE
// hash function for QColor for std::unordered_set
namespace std {
template<> struct hash<QColor>
{
using argument_type = QColor;
using result_type = size_t;
result_type operator()(const argument_type &c) const
{
return hash<QRgb>()(c.rgba());
}
};
} // namespace std
int main(int argc, char *argv[])
{
QSet<QColor> qs;
qs.insert(QColor(100, 100, 100));
qs.insert(QColor(100, 100, 100));
qs.insert(QColor(50, 100, 100));
qDebug() << qs.size() << qs.toList();
std::unordered_set<QColor> ss;
ss.insert(QColor(100, 100, 100));
ss.insert(QColor(100, 100, 100));
ss.insert(QColor(50, 100, 100));
qDebug() << ss.size();
for (auto c : ss)
qDebug() << c;
return 0;
}
或者您也可以不将 QColor
放入集合中,而是将 QRgb
值(通过 QColor::rgba()
)放入集合中,然后再将它们转换回 QColor
再次通过 QColor(QRgb)
构造函数。