Я пытался пропустить все дочерние узлы определенного узла XML и присоединиться к их атрибутам name
. Структура:QTextStream :: readAll возвращает пусто QString
<params>
<param name="BLAH" />
</params>
Желаемый результат:
PARAM1='$PARAM1',PARAM2='$PARAM2',PARAM3='$PARAM3'[...]
Код:
// Create empty text stream
QTextStream paramNames("");
// Start looping child by child
QDomElement child = params.firstChildElement();
bool firstIteration = true;
while(!child.isNull()) {
QString param_name = child.attribute("n");
// Skips empty names
if(param_name.length()>0) {
// This prevents both leading and trailing comma
if(!firstIteration)
paramNames<<",";
else
firstIteration = false;
// This should fill in one entry
paramNames<<param_name<<"='$"<<param_name<<'\'';
}
child = child.nextSiblingElement();
}
Теперь даже отладчик говорит, что если я
QString paramNamesSTR = paramNames.readAll();
paramNamesSTR
является пустую строку. Однако, если я использую std
библиотеку вместо этого, все работает:
std::stringstream paramNames("");
QDomElement child = params.firstChildElement();
bool firstIteration = true;
while(!child.isNull()) {
std::string param_name = child.attribute("n").toUtf8().constData();
if(param_name.length()>0) {
if(!firstIteration)
paramNames<<",";
else
firstIteration = false;
paramNames<<param_name<<"='$"<<param_name<<'\'';
}
child = child.nextSiblingElement();
}
QString paramNamesSTR = QString::fromStdString(paramNames.str());
Так в чем разница? Почему Qt QTextStream
возвращает пустую строку? Я бы предпочел быть совместимым с используемыми библиотеками и поэтому использовать QTextStream
, а не std::stringstream
, хотя прежде всего я предпочитаю первое.
И я достигаю поток полноценность, используя этот оригинальный 'QString', или я все еще называю 'readAll'? Если он сохраняет данные в 'QString', это не так хорошо, как использование' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '+'? –
@ TomášZato, вы можете сделать это в любом случае. – SingerOfTheFall
Я тестировал код, и он работает, поэтому спасибо. Однако я немного, но не знаю, должен ли я даже беспокоиться о 'TextStream', когда он ведет себя так же, как если бы я просто использовал' + 'для присоединения к строкам ... –