Метод QString::arg
действительно существует в качестве обходного для ограниченной строки форматирования поддержки С ++, чтобы убедиться, что вы не используете sprintf
со всеми проблемы, которые влекут за собой (не обрабатывать заполнители, которые находятся в разных порядках на разных языках, переполнение буфера и т. д.). Поскольку у Python нет таких проблем, нет веских оснований для его использования.
Фактически, есть очень мало оснований для использования QString
явно. В PyQt4 он не был полностью отключен, но PyQt5, это было. (Технически, PyQt4 поддерживает «string API v2» как в Python 2.x, так и 3.x, но только по умолчанию включает его в 3.x; PyQt4 включает v2 по умолчанию в обоих и скрывает возможность переключения на v1.) См. Python Strings, Qt Strings and Unicode в документации для некоторых добавленных данных.
Существует одна редкость, но главным, если это влияет на вас, исключение: Если вы пишете приложение, которое частично в Qt/C++ и частично в PyQt, вы будете иметь проблемы обмена I18N данные, когда некоторые из них находятся в формате "string %1 %2"
, а другие - в формате "string {1} {2}"
. (В первый раз, когда вы отправляете один из своих файлов в аутсорсинговую компанию по переводу, они будут ошибочно, гарантировано.)
Во-первых, в PyQt4 явно использование QString явно не рекомендуется вещи; они просто не закончили интеграцию родных строк и QStrings. Обратите внимание, что PyQt5 почти полностью скрывает QString, как в 2.x, так и 3.x. (Хотя мы и находимся в этом, вы почти наверняка захотите получить литерал в Юникоде, потому что иначе вы скрестите пальцы и надеетесь, что ваш литерал будет интерпретироваться как латинский-1, не говоря уже о том, чтобы сделать неявный латинский-1-to- Unicode преобразование каждый раз через эту функцию без уважительной причины.) – abarnert
@abarnert Да, я могу ошибаться, используя термин «предлагаемый способ» здесь. Я просто видел, как Марк Саммерфилд использовал его таким образом в своей книге pyqt и думал, что это будет правильная техника. Спасибо, что упомянули об этом. – Ilias95
Книги имеют тенденцию быстро устаревать. Вероятно, это была хорошая идея 2 или 3 года назад, когда вы поддерживали совместимость с pre-2.6 Python и pre-4.6 Qt, было очень важно, но моя память не вернулась так далеко. :) – abarnert