Получение цвета слова COM MS Word

290
23 сентября 2017, 23:34

Пытаюсь получить нормально цвет слова из документа, на что мне в ответ невообразимые цифры, как мне из них получить нормальные значения в HEX или хотя бы RGB?

Код:

#include <QGuiApplication>
#include <QDebug>
#include <QAxObject>
#define _ qDebug() <<
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QAxObject *m_word = new QAxObject("Word.Application", 0);
    m_word->setProperty("Visible", true);
    QAxObject *documents = m_word->querySubObject("Documents");
    QAxObject *newDocument = documents->querySubObject("Add(QVariant)", QVariant("D:\\test.docx"));
    QAxObject *words = newDocument->querySubObject("Words");
    int countWord = words->property("Count").toInt();
    for (int a = 1; a <= countWord; a++){
        QAxObject *word = words->querySubObject("Item(int)", a)->querySubObject("FormattedText");
        QAxObject *font = word->querySubObject("Font");
        _ word->property("Text");
        _ font->property("Name");
        _ font->property("Size");
        _ font->property("Bold");
        _ font->property("Italic");
        _ font->property("Underline");
        _ font->property("StrikeThrough");
        _ font->property("Color");
        _ font->property("UnderlineColor");
        _ word->property("HighlightColorIndex");
        delete font;
        delete word;
        break;
    }
    m_word->dynamicCall("Quit()");
    delete words;
    delete newDocument;
    delete documents;
    delete m_word;
    return 0;
    return app.exec();
}

Ответ:

QVariant(QString, "Классический ")
QVariant(QString, "Times New Roman")
QVariant(double, 14)
QVariant(int, -1)
QVariant(int, 0)
QVariant(int, 1)
QVariant(int, 0)
QVariant(int, 16750848)
QVariant(int, 16711680)
QVariant(int, 0)
Answer 1

А чем вас не устраивают эти цифры? 16750848 - это FF9900, 16711680 - это FF0000. Не вижу здесь проблемы. Вы можете перевести их в QColor примерно так:

quint32 c = 16711860;
QColor color(c >> 16, (c >> 8) & 0xFF, c & 0xFF, 0xFF);
Answer 2

Рассмотрим на примере одного числа, которое соответствует свойству Color:

16750848

В шестнадцатеричной системе счисления (для перевода можете использовать обычный виндовый калькулятора) это будет выглядеть так:

FF9900 

Далее не составляет труда разбить это число на байты FF, 99, 00. Если порядок этих байтов соответствует RGB, то получите следующие значения:

R = 255
G = 153
B = 0

Или в виде цвета:

Для перевода в тип QColor должно быть достаточно использовать соответствующий конструктор:

QColor::QColor(QRgb color);

Т.е.

QColor(16750848);
READ ALSO
Использование move семантики [дубликат]

Использование move семантики [дубликат]

На данный вопрос уже ответили:

282
Подскажите, как можно сделать чтобы ввод и вывод был в функции ?

Подскажите, как можно сделать чтобы ввод и вывод был в функции ?

Подскажите, как можно сделать чтобы ввод и вывод был в функции ?

241
Динамические массивы с++

Динамические массивы с++

Ребят помогите пожалуйстаВот задача

248
Правильность реализации деструктора

Правильность реализации деструктора

Написал небольшой класс который в будущем будет выступать в роли полноценного фреймворка, все работает, утечек вроде бы нет, нет никаких...

238