Приложения, которые не удовлетворяются только 256 различными символами, имеют варианты использования широких символов (более 8 бит) или кодирования переменной длины (многобайтовая кодировка в терминологии C ++), таких как UTF-8. Широким символам обычно требуется больше места, чем кодирование с переменной длиной, но они быстрее обрабатываются. Многоязычные приложения, которые обрабатывают большие объемы текста, обычно используют широкие символы при обработке текста, но преобразуют его в UTF-8, когда хранят его на диске.
Единственное отличие между string
и wstring
- тип данных символов, которые они хранят. Строка хранит char
s, размер которой должен быть не менее 8 бит, поэтому вы можете использовать строки для обработки, например. ASCII, ISO-8859-15 или UTF-8. В стандарте ничего не говорится о наборе символов или кодировке.
Практически каждый компилятор использует набор символов, первые 128 символов которого соответствуют ASCII. Это также относится к компиляторам, использующим кодировку UTF-8. Важное значение, которое следует учитывать при использовании строк в UTF-8 или какой-либо другой кодировке переменной длины, состоит в том, что индексы и длины измеряются в байтах, а не в символах.
Тип данных wstring wchar_t
, размер которого не определен в стандарте, за исключением того, что он должен быть как минимум равным char, обычно 16 бит или 32 бита. wstring может использоваться для обработки текста в реализации, определенной широкосимвольной кодировкой. Поскольку кодировка не определена в стандарте, преобразовать между строками и wstrings непросто. Нельзя предположить, что wstrings также будет иметь кодировку с фиксированной длиной.
Если вам не нужна поддержка нескольких языков, вам может быть хорошо, если вы используете только обычные строки. С другой стороны, если вы пишете графическое приложение, часто бывает, что API поддерживает только широкие символы. Тогда вы, вероятно, захотите использовать те же самые широкие символы при обработке текста. Имейте в виду, что UTF-16 является кодировкой переменной длины, что означает, что вы не можете считать length()
, чтобы вернуть количество символов. Если API использует кодировку с фиксированной длиной, такую как UCS-2, обработка становится легкой. Преобразование между широкими символами и UTF-8 трудно сделать переносимым образом, но, опять же, API вашего пользовательского интерфейса, вероятно, поддерживает преобразование.
Qt5 должен поддерживаться. См. https://github.com/enthought/traitsui/blob/master/CHANGES.txt . Если у вас возникли проблемы с этим, пожалуйста, откройте вопрос о GH.
Обновление:
Попробуйте что-то вроде этого (частично, не проверено):
from traitsui.editors import ProgressEditor
(other imports etc)...
class ProgressDialog(HasTraits):
progress = Int
view = View(Item('progress', show_label=False,
editor=ProgressEditor(min=0, max=100)),
title='Progress'
)