-1
重複して入力しなくても、選択したすべての色をリストに追加し、後で選択したすべての色をウィジェットにポップアップ表示する必要があります。QColor into later retrieval
にはどうすればリストにQColorを追加することができますし、後で
重複して入力しなくても、選択したすべての色をリストに追加し、後で選択したすべての色をウィジェットにポップアップ表示する必要があります。QColor into later retrieval
にはどうすればリストにQColorを追加することができますし、後で
QColor
がデフォルトでQSet
またはstd::unordered_set
のためのハッシュ関数を提供していない、それを抽出します。あなたは(だけでなくアルファ値を含みます)QRgbのハッシュ関数にそれを委譲することによって、ローカル(またはグローバルあなたのプログラムのため)しかしそれを追加することができます。
#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
Sを置くことができませんQRgb
の値を(QColor::rgba()
経由で)返し、QColor(QRgb)
コンストラクタを介してQColor
に再度変換します。
'QList'の代わりに' QSet'を使用します。 –
@DmitrySazonov、 'QSet'はアイテムの一意性を保証しません。 – vahancho
QsetがQColorに対応していません – Sijith