Estou tentando fazer algo assim:
QString string;
// do things...
std::cout << string << std::endl;
mas o código não compila. Como gerar o conteúdo de qstring no console (por exemplo, para fins de depuração ou outros motivos)? Como converter QString
para std::string
?
c++
qt
type-conversion
qstring
agosto
fonte
fonte
static inline std::string toUtf8(const QString& s) { QByteArray sUtf8 = s.toUtf8(); return std::string(sUtf8.constData(), sUtf8.size()); }
std::string utf8_text = qs.toUtf8().constData();
Então sua afirmação não é corretaQString s = QString::fromUtf8("árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"); std::cout << s.toStdString() << std::endl; std::cout << s.toUtf8().constData() << std::endl;
. O primeiro está incorreto, o segundo é perfeito. Você precisa de um terminal utf8 para testar isso..toStdString()
para mim sempre resulta em uma violação de acesso no operador do tubo, independentemente doQString
conteúdo do site (não latino1 ou não). Esta é em Qt 4.8.3 / MSVC ++ 10 / Win 7.Você pode usar:
Ele usa internamente a função QString :: toUtf8 () para criar std :: string, portanto também é seguro para Unicode. Aqui está a documentação de referência para
QString
.fonte
QString::toStdString()
agora é usadoQString::toUtf8()
para executar a conversão, portanto, as propriedades Unicode da string não serão perdidas ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, aqui está .Se seu objetivo final é obter mensagens de depuração no console, você pode usar qDebug () .
Você pode usar como,
qDebug()<<string;
que imprimirá o conteúdo no console .Dessa maneira, é melhor do que convertê-lo
std::string
apenas para fins de depuração de mensagens.fonte
No entanto, se você estiver usando o Qt:
fonte
A melhor coisa a fazer seria sobrecarregar o operador << você mesmo, para que o QString possa ser passado como um tipo para qualquer biblioteca que espera um tipo com capacidade de saída.
fonte
Uma alternativa à proposta:
poderia ser:
Consulte a documentação qPrintable , uma macro que fornece um const char * da QtGlobal.
fonte
-no-stl
-Option. mais algumas informaçõesA maneira mais simples seria
QString::toStdString()
.fonte
Você pode usar isso;
fonte
poderia até lançar exceção no compilador VS2017 no xstring
o caminho certo (seguro - sem exceção) é como é explicado acima pela Artyom
fonte
Tente o seguinte:
fonte