Ruslan Polupan
Feb. 13, 2020, 3:16 p.m.

Integer to QColor

int, QColor

Доброго времени суток!
В базе данных цета хранятся как INTEGER

Как преобразовать значение в QColor?
Чет я сломал мозг...

3

Do you like it? Share on social networks!

13
Evgenii Legotckoi
  • Feb. 13, 2020, 4:04 p.m.
  • (edited)

Добрый день.

Сначала нужно конвертировать int в QString hex в формате понятном для QColor, а потом установить его в QColor

  1. int decimal = 826185;
  2. QString hexvalue = QString("#%1").arg(decimal, 8, 16, QLatin1Char( '0' ));
  3. QColor color;
  4. color.setNamedColor(hexvalue);
  5. qDebug() << decimal << hexvalue << color.red() << color.green() << color.blue();

Вывод этого кода будет такой

826185 "#000c9b49" 12 155 73

    Ruslan Polupan
    • Feb. 13, 2020, 4:40 p.m.

    Спасибо.
    Немного дезинформировал, приложение консольное QColor не используешь.
    Нужен #hex цвет для html шаблона.

    ЗЫ никогда бы не подумал что все так сложно с цветами :-)

      Evgenii Legotckoi
      • Feb. 13, 2020, 4:44 p.m.
      • (edited)

      ну тогда так

      1. int decimal = 826185;
      2. QString hexvalue = QString("#%1").arg(decimal, 6, 16, QLatin1Char( '0' ));
      3. qDebug() << decimal << hexvalue;

      Выхлоп такой будет

      826185 "#0c9b49"

        Ruslan Polupan
        • Feb. 13, 2020, 5:14 p.m.

        Спасибо, это я пробовал но цвета почему то отличаются...
        лан это не критично...

          Evgenii Legotckoi
          • Feb. 13, 2020, 5:21 p.m.

          Сильно отличаются? Полагаю, что там также ещё альфа канал есть.
          Тогда попробуйте прибавить к строке 00 на конце

          1. int decimal = 826185;
          2. QString hexvalue = QString("#%1").arg(decimal, 6, 16, QLatin1Char( '0' ));
          3. hexvalue.append("00");
          4. qDebug() << decimal << hexvalue;

          Выхлоп такой будет

          826185 "#0c9b4900"

            Ruslan Polupan
            • Feb. 13, 2020, 5:35 p.m.

            Про альфа я уже начитался попробовал, стало еще хуже :-)

              Ruslan Polupan
              • Feb. 13, 2020, 5:40 p.m.
              • (edited)

              Это без альфа, с лева то что получилось справа вроде как образец

              те у меня получается

              1. <td align=right bgColor=#00ffff>92</td>

              а в оригинале

              1. <TD align=right bgColor=#FFFF00><SMALL><B>92</B>

              проверил дальше :-)
              у меня

              1. <td align=right bgColor=#0000ff>95</td>
              1. <TD align=right bgColor=#FF0000><SMALL><B>95</B>

              в оригинале

              такое чуство что не с того конца заполняется

                Evgenii Legotckoi
                • Feb. 13, 2020, 5:51 p.m.

                Прикол. Цвета по ходу в зеркальном отображении представлены.

                Сделайте так

                1. int decimal = 826185;
                2. QString hexvalue = QString("%1").arg(decimal, 6, 16, QLatin1Char( '0' ));
                3. std::reverse(hexvalue.begin(), hexvalue.end());
                4. hexvalue = QString("#%1").arg(hexvalue);
                  Ruslan Polupan
                  • Feb. 13, 2020, 5:59 p.m.

                  уже, но осью являются 3 и4 символ

                    Ruslan Polupan
                    • Feb. 13, 2020, 6:04 p.m.

                    так что как-то так :-)

                    1. QString color = QString("%1").arg(intCol, 6, 16, QLatin1Char('0'));
                    2. QString c2 = color;
                    3. c2[0]=color[4];
                    4. c2[1]=color[5];
                    5. c2[4]=color[0];
                    6. c2[5]=color[1];
                      Evgenii Legotckoi
                      • Feb. 13, 2020, 6:07 p.m.
                      • The answer was marked as a solution.

                      Ну тоже как вариант.

                      Или вот такое

                      1. bool splitString(const QString &str, int n, QStringList &list)
                      2. {
                      3. if (n < 1)
                      4. return false;
                      5.  
                      6. QString tmp(str);
                      7.  
                      8. list.clear();
                      9.  
                      10. while (!tmp.isEmpty()) {
                      11. list.append(tmp.left(n));
                      12. tmp.remove(0, n);
                      13. }
                      14.  
                      15. return true;
                      16. }

                      А потом так

                      1. QStringList splittedList;
                      2. splitString(hexvalue, 2, splittedList);
                      3. QString reversed = splittedList.join();
                        Ruslan Polupan
                        • Feb. 14, 2020, 7:49 p.m.

                        Нашел функцию с тарых исходниках php

                        1. function IntToColor ($v)
                        2. {
                        3. return sprintf("%02X%02X%02X",$v&0xFF,($v>>0x8)&0xFF,($v>>0x10)&0xFF);
                        4. }

                        Может кто помочь адаптировать... читать про ПХП не осилю...

                          ИП
                          • Feb. 20, 2020, 12:24 p.m.
                          • (edited)
                          1. QSqlQuery query("SELECT CONCAT("#", LPAD(HEX(`t`.RGB), 6, 0)) FROM table AS t");
                          2. query.exec();
                          3. while (query.next())
                          4. {
                          5. QColor(query.value(0).toString());
                          6. }

                            Comments

                            Only authorized users can post comments.
                            Please, Log in or Sign up
                            • Last comments
                            • Evgenii Legotckoi
                              March 9, 2025, 9:02 p.m.
                              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                            • VP
                              March 9, 2025, 4:14 p.m.
                              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                            • ИМ
                              Nov. 22, 2024, 9:51 p.m.
                              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                            • Evgenii Legotckoi
                              Oct. 31, 2024, 11:37 p.m.
                              Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                            • A
                              Oct. 19, 2024, 5:19 p.m.
                              Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html