QDomDocument docInstall;
docInstall = setContent("xml file");
QDomElement root = docInstall.documentElement();
QDomElement child = root.firstChildElement("component");
while (!child.isNull()) {
                QTreeWidgetItem * itemComponent = pSelectTypePage->wInstall->topLevelItem(i);
		if (itemComponent->checkState(0) == Qt::Checked) // Это условие, если выбран компонент для установки в QTreeWidget
		{
			parseElement(child, installDir);
                        // Если сюда добавить что-то типа
                        otherEment.appendChild(child);
                        // То он читает первый элемент, а последующие пропадают. Из-за чего это происходит?
		}
		
		child = child.nextSiblingElement("component");
}
Вопрос в камментариях кода.
В твоем коде обработается только  один child, так как он теперь последний "ребенок" у otherEment и child.nextSiblingElement("component") возвращает NULL.
Вот вариант:
QDomDocument docInstall;
docInstall = setContent("xml file");
QDomElement child = docInstall.firstChildElement("component"); // в твоем коде была лишняя переменная root
while (!child.isNull()) {
                QTreeWidgetItem * itemComponent = pSelectTypePage->wInstall->topLevelItem(i);
		if (itemComponent->checkState(0) == Qt::Checked) // Это условие, если выбран компонент для установки в QTreeWidget
		{
			parseElement(child, installDir); 
                                             //ф-ция должна быть обьявлена как parseElement(const QDomElement &, <вторая переменная>), во избежании изменения child 
                                                otherEment.appendChild(child.cloneNode(true)); //Добавляем глубокую копию child к OtherEment. Если поставить false то детей не клонирует
                        	}
		
		child = child.nextSiblingElement("component");
}
должно работать