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

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

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

QString QString :: fromStdString (const std :: string & str)

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

Если по строке вы имеете в виду Ascii encoded 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 имеет статический метод для преобразования 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 будет скопировать себя, если в конце нет места для добавления '\0' .

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

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

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

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

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

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

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

Более того, чтобы преобразовать все, что вам нужно, вы можете использовать class 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* string, или объект std::string C ++?

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

  • Ссылка QtQString

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

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

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

 std::string name2("Stack Overflow"); QString qname2(name2.c_str()); 
  • Скопировать содержимое streambuf в строку
  • Как прочитать весь файл в строке с помощью C #?
  • Перенаправить вывод консоли в строку в java
  • Правила для символов строки строки C ++
  • В Java, как проверить, содержит ли строка подстроку (игнорируя регистр)?
  • strcmp на строке, прочитанной с помощью fgets
  • Разбор строки с разделителями-запятыми std :: string
  • Почему я не могу написать строковый литерал, в то время как я * могу * написать строковый объект?
  • Строка подключения с относительным путем к файлу базы данных
  • Извлечь целочисленную часть в строке
  • c #: Как использовать перечисление для хранения строковых констант?
  • Interesting Posts

    Какой тип данных MySQL следует использовать для широты / долготы с 8 десятичными знаками?

    «Адрес DNS-сервера не найден» для некоторых веб-сайтов

    Использование батареи для ноутбука с питанием от сети переменного тока

    Windows не может найти «.exe» – только некоторые приложения

    Как добавить строки в кадр данных R

    Поддерживает ли поддержка OkHttp самоподписанные сертификаты SSL?

    Сетевой адаптер для настольных ПК не может подключаться к коммутатору

    Какова стоимость вызова array.length

    Переключение между изображениями Android Navigation Drawer и Up caret при использовании fragmentов

    Как реализовать функцию поиска на веб-сайте?

    Включая один исходный файл C в другой?

    Что означает выравнивание стека?

    Проблемы с производительностью в моей системе

    Запросить блокировку нескольких неудачных логинов в течение определенного периода времени

    viewDidLoad в NSViewController?

    Давайте будем гением компьютера.