Каков самый простой способ сделать это?
Как изменить строку в QString?
Ответ 1
Если по строке вы имеете в виду 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);
Ответ 2
Если скомпилировано с совместимостью STL, QString
имеет статический метод для преобразования std::string
в QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Ответ 3
Альтернативный способ:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Это имеет то преимущество, что не используется .c_str()
, что может привести к тому, что std::string
скопирует себя, если в конце нет места для добавления '\0'
.
Ответ 4
std::string s = "Sambuca";
QString q = s.c_str();
Предупреждение: Это не будет работать, если std::string
содержит \0
s.
Ответ 5
Я столкнулся с этим вопросом, потому что у меня была проблема при выполнении ответов, поэтому я размещаю свое решение здесь.
В приведенных выше примерах все показаны образцы со строками, содержащими только значения ASCII, и в этом случае все работает нормально. Однако при работе со строками в Windows, которые могут также содержать другие символы, например, немецкие умлауты, тогда эти решения не работают.
Единственным кодом, который дает правильные результаты в таких случаях, является
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Если вам не нужно иметь дело с такими строками, то приведенные выше ответы будут работать нормально.
Ответ 6
Вы имеете в виду строку C, как в строке char*
, или объект С++ std::string
?
В любом случае вы используете тот же конструктор, что и в документе QT:
Для обычной строки C просто используйте главный конструктор:
char name[] = "Stack Overflow";
QString qname(name);
При a std::string
вы получаете char*
в буфер и передаете это конструктору QString
:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
Ответ 7
Кроме того, чтобы преобразовать все, что вам нужно, вы можете использовать класс QVariant.
например:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
Выход
"hello !"
"10"
"5.42"
5