Как генерировать новые цвета QColors, которые отличаются - PullRequest
4 голосов
/ 20 декабря 2011

Я хочу иметь большой массив QColors, который многие классы будут совместно использовать и индексировать.

В прошлом у меня всегда был такой список:

QColor colours[10] = {QColor("cyan"), QColor("magenta"), QColor("red"),
                      QColor("darkRed"), QColor("darkCyan"), QColor("darkMagenta"),
                      QColor("green"), QColor("darkGreen"), QColor("yellow"),
                      QColor("blue")};

Тем не менее, теперь я хочу намного больше 10. Как я могу создать большой список различных цветов Q?

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

, если вы хотите, чтобы ваш список был динамичным, я бы вместо этого использовал какой-то QVector, например, в Менеджере цветов:


    class ColorManager
    {
        public:
            ColorManager(size_t iDefaultSize)
            {
                m_colorList.reserve(iDefaultSize);
            }

            void addColor(const QColor& c)
            {
                m_colorList.push_back(c);
            }

            QColor& operator[](int iIndex)
            {
                return m_colorList.at(iIndex);
            }

        private:
            QVector m_colorList;
    };

Если ваши цвета должны быть уникальными, рассмотрите возможность использования QSet, но вы потеряете оператор [], поскольку QSet - упорядоченная структура, и вам придется реализовать поиск в ColorManager, используя QSet :: find (). Это также будет медленнее. Если он должен быть потокобезопасным, вы можете в конечном итоге защитить его с помощью QMutex.

Кроме того, я не знаю, зачем вам это нужно, но вы должны взглянуть на:

QColorGroup и / или QPalette

2 голосов
/ 02 апреля 2015

Вот хорошая статья о случайном генерировании цветов из наборов, чтобы они хорошо выглядели вместе.

http://devmag.org.za/2012/07/29/how-to-choose-colours-procedurally-algorithms/

0 голосов
/ 20 декабря 2011

Вы можете использовать конструктор QColor, который принимает параметры красного, зеленого и синего для создания новых цветов:

QColor colours[10] = {QColor(255,0,0), QColor(0,255,0), QColor(0,0,255),
                  QColor(0,0,0), QColor(255,255,255),
                  QColor(0,128,64)};

Вы можете использовать как можно больше комбинаций r, g, b, чтобы придумать новыецвета.Вы можете найти параметры Red, Green и Blue для разных цветов, посмотрев таблицу цветов Pantone и создав хороший набор подходящих цветов для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...