Почему QVariant рассматривает тип char как целочисленный тип? - PullRequest
2 голосов
/ 19 июня 2019

Я пытаюсь написать фрагмент кода, который бы взял QList из QVariants и заполнил бы список с помощью ListView.

Примеры использования с типами QString, int, bool, double и т. Д. Успешны. Однако, когда я пытаюсь передать тип данных char в качестве элементов списка, он обрабатывается как целое число, т.е. берется значение ASCII.

Есть ли способ заставить QVariant рассматривать char как char?

Примечание: Я использую Qt5.6.0. Я попытался проверить тип с помощью QVariant :: type (), ожидая, что он вернет QVariant :: Char, чтобы я преобразовал его в строку и использовал его. Но QVariant :: type () вернул QVariant :: Int.

int main()
{
    QVariant charVar = 'A';
    qDebug()<< charVar<< "\n";
    return 0;
}

Фактический результат:

QVariant(int, 65)

Expectation:

QVariant(char, 'A')

1 Ответ

2 голосов
/ 19 июня 2019

Тип char для QVariant совпадает с типом int. Если вы хотите сохранить реальный символ, вы, вероятно, захотите набрать QChar.

Обратите внимание, что QVariant имеет конструкторы только для QChar и int. В этом случае C ++ char будет приведен к int.

Чтобы рассматривать ваш пример как персонажа, вы можете явно привести к QChar

QVariant v1 = QChar('A');
QVariant v2(QVariant::Type::Char);
v2 = 'B';
qDebug() << v1 << v2;
//Output: QVariant(QChar, 'A') QVariant(int, 66)
...