Какой самый простой способ сделать это?
Если под строкой вы подразумеваете, std::string
что можете сделать это следующим способом:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Если под строкой вы имеете в виду закодированный Ascii, const char *
вы можете использовать этот метод:
QString QString :: fromAscii (const char * str, int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Если вы const char *
закодировали с помощью системной кодировки, которую можно прочитать с помощью QTextCodec :: codecForLocale (), то вам следует использовать этот метод:
QString QString :: fromLocal8Bit (const char * str, int size = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
Если у вас есть const char *
кодировка UTF8, вам нужно использовать этот метод:
QString QString :: fromUtf8 (const char * str, int size = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
Также есть метод для const ushort *
содержания строки в кодировке UTF16:
QString QString :: fromUtf16 (const ushort * unicode, int size = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
Если скомпилировано с совместимостью с STL,
QString
имеет статический метод для преобразования astd::string
вQString
:источник
QString qstr = QString(str.c_str());
? Не уверен,QString
копирует ли то, что передано в него.fromStdString
сохранит их, построив из.c_str
не будет. (И именно это и привело меня к этому вопросу.)Альтернативный способ:
Это имеет преимущество в том, что не используется,
.c_str()
что может привестиstd::string
к копированию самого себя, если'\0'
в конце нет места для добавления .источник
.c_str()
)Предупреждение: это не будет работать, если
std::string
содержит\0
s.источник
Я столкнулся с этим вопросом, потому что у меня возникла проблема при ответе на вопросы, поэтому я публикую свое решение здесь.
Все вышеприведенные примеры показывают примеры со строками, содержащими только значения ASCII, и в этом случае все работает нормально. Однако, когда речь идет о строках в Windows, которые также могут содержать другие символы, такие как немецкие умляуты, эти решения не работают
Единственный код, который дает правильные результаты в таких случаях,
Если вам не нужно иметь дело с такими строками, то приведенные выше ответы будут работать нормально.
источник
fromLocal8Bit()
Кроме того, чтобы конвертировать все, что вы хотите, вы можете использовать класс QVariant.
например:
вывод
источник
Вы имеете в виду строку C, как в
char*
строке, или объект C ++std::string
?В любом случае, вы используете тот же конструктор, который описан в справке по QT:
Для обычной строки C, просто используйте главный конструктор:
Для a
std::string
вы получаете вchar*
буфер и передаете этоQString
конструктору:источник
QByteArray::QByteArray (const char* data, int size)
сначала оболочку буфера, а затем передать ееQString
конструктору.