Цитата(fantom @ 10.4.2009, 17:21)

Как технически клонировать виджет который содержит внутри себя другие объекты.
Цитата(fantom @ 10.4.2009, 16:45)

Работа с ним будет происходить примерно следующим образом: в дизайнере мы переносим мышкой необходимый виджет на виджет-контейнер
Отклонусь немного от темы (а мож и не отклонюсь

).
По двум недавным обсуждения по поводу динамического создания форм (
раз два) родилась следущая мысль. Не знаю на сколько хорошая, но право на жизнь имеющая. (Меня покрайней мере было интересно это реализовать).
Итак, вопросс
Цитата(fantom @ 10.4.2009, 17:21)

Как технически клонировать виджет который содержит внутри себя другие объекты.
Сразу хочу оговориться, с XML опыта работы очень мало, так что если есть способ сократить код или сделать более изящно, сделайте это. Мне прошу не пинать

И еще, метод
domxmlToString был позаимствован у xintrea здесь (
ссылка)
Итак, изначально форма, виджет-контейнер и все что в нем, создается в дисигнере. Т.е. мы имее ui файл.
QDomDocument doc("mydocument");
QFile file("../form/oscilloscope.ui");
if (!file.open(QIODevice::ReadOnly))
return 0;
if (!doc.setContent(&file)) {
file.close();
return 0;
}
file.close();
QDomNodeList nodelist = doc.elementsByTagName( "widget" );
QDomElement elem;
qDebug() << nodelist.count();
for (int i =0; i != nodelist.count(); i++) {
elem = nodelist.item(i).toElement();
if(elem.attribute("name") == "voltdivgroupBox")
break;
}
QByteArray xmlstr = domxmlToString(elem).toUtf8();
xmlstr.prepend("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<ui version=\"4.0\">");
xmlstr.append("</ui>");
QUiLoader loader;
QBuffer buffer(&xmlstr);
buffer.open(QIODevice::ReadOnly|QIODevice::Text);
QWidget *myWidget = loader.load(&buffer);
buffer.close();
myWidget->show();
приложение. Описание метода domxmlToString
QString domxmlToString(QDomNode xmldata)
{
if(xmldata.isDocument()) {
return xmldata.toDocument().toString();
}
else {
QString xmlcode;
QTextStream stream(&xmlcode, QIODevice::WriteOnly);
xmldata.save(stream, 1);
return xmlcode;
}
}
Вот что получилось у меня(см. прикрепленные рисунки). Как видете я создал два клона части своего приложения, Все свойства при этом сохранены, в том числе и ресурсы.
Ух. Я в тему надеюсь

?
Даже если не совсем, хвалим меня, я старался
Эскизы прикрепленных изображений
 РЈРСВВВВВВВВВВеньшено Р В Р’В Р СћРІР‚ВВВВВВВВВР С• 77%
1152 x 864 (235.66 килобайт)
|