Как изменить строку в QString?

какой самый простой способ сделать это?

7 ответов


если под строкой вы подразумеваете std::string вы можете сделать это с помощью этого метода:

в QString в QString::fromStdString(константные СТД::строка STR&)

std::string str = "Hello world";
QString qstr = QString::fromStdString(str);

если под строкой вы подразумеваете кодировку Ascii const char * затем вы можете использовать этот метод:

в QString в QString::fromAscii(константный тип char * стр, инт размер = -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 есть статический метод преобразование std::string до QString:

std::string str = "abc";
QString qstr = QString::fromStdString(str);

альтернативный способ:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());

это имеет преимущество не использовать .c_str() что может привести к std::string скопировать себя в случае, если нет места для добавления '' В конце.


std::string s = "Sambuca";
QString q = s.c_str();

предупреждение: Это не будет работать, если std::string содержит s.


я столкнулся с этим вопросом, потому что у меня была проблема при выполнении ответов, поэтому я размещаю свое решение здесь.

все вышеприведенные примеры показывают примеры со строками, содержащими только значения ASCII, и в этом случае все работает нормально. Однако при работе со строками в Windows, которые также могут содержать другие символы, такие как немецкие umlauts, эти решения не работают

единственный код, который дает правильные результаты в таких случаях

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

Если вам не нужно иметь дело с такими строками, тогда приведенные выше ответы будут работать нормально.


кроме того, чтобы преобразовать все, что вы хотите, вы можете использовать класс 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

вы имеете в виду строку C, а в char* строка или C++ std::string "объект"?

в любом случае, вы используете тот же конструктор, что и в ссылке QT:

для обычной строки C просто используйте главный конструктор:

char name[] = "Stack Overflow";
QString qname(name);

на std::string вы получаете char* в буфер и передать его в QString конструктора:

std::string name2("Stack Overflow");
QString qname2(name2.c_str());