9

私はこのようなもののための醜いコードを持っています (ac char ポインターを作成し、その中に QString をコピーします) が、おそらく ... QT にエレガントな方法で存在します ...

実際のコード:

QString maquina is a method parameter.

char *c_maquina = new char[maquina.length() + 1];
strcpy(c_maquina, maquina.toStdString().c_str());

情報のために、単純な const char* ではなく REAL char* が必要なので、このコードは機能しません:

idMaquina.toLatin1().data();

http://developer.qt.nokia.com/faq/answer/how_can_i_convert_a_qstring_to_char_and_vice_versaを使用できません

4

7 に答える 7

0
std::vector<char> result;
result.reserve( qstr.length()+1 ); // +1 might not be needed, not sure how QString counts
result.insert( result.end(), qstr.begin(), qstr.end() );
char* ptr = result.data(); // while retval exists, retval.data() is a char* pointing to a buffer
于 2013-07-30T00:32:37.173 に答える
0

QByteArray には の非 const バージョンが含まれていますdata()。参照: http://qt-project.org/doc/qt-5.0/qtcore/qbytearray.html#data

于 2013-07-30T10:16:58.070 に答える
0

QString::toLatin1().data() は、内部バッファーを提供するため、 const char* を提供します。それが const である理由は、それを変更することになっていないからです。

したがって、変更したい場合は、そのデータを他のバッファにコピーする必要があります... new() を使用して割り当てたバッファなど。

于 2013-07-30T00:10:17.333 に答える